![](/img/trans.png)
[英].NET 3.5 SP1 as a requirement (or should I try for 3.5 w/o SP1)?
[英]Detect .NET Framework 3.5 SP1 Dependency (cmp. 3.5 w/o SP1)
我在我的機器上使用3.5 SP1,而我們的客戶目前使用3.5不帶SP1。 我不知道VS2008中的任何方法將解決方案或項目定位到沒有SP1的3.5,只安裝了我帶有SP1的3.5。
如果我們使用3.5 w / o SP1中不可用的函數或構造函數,代碼將無法正常工作。
也就是說,我想在編譯時檢測沒有SP1的情況會有什么效果。
到目前為止,我們已經完成了測試(在VM或單獨的機器中)以查看應用程序是否中斷,並且當我們使用的部分API在SP1之前不可用時,它確實會中斷。 問題是它只在代碼實際運行時(在運行時),而不是在加載程序集時中斷。
一種解決方案是使用VS2008 w / o SP1的機器並嘗試編譯項目。 但是,我希望通過分析源代碼或我們生成的程序集來幫助我檢測對3.5 SP1的依賴性(由於使用新的API,或其他)。
我的谷歌權力對這個問題,任何提示都不夠強大?
我遇到了同樣的問題,我找到了解決方案。 對於我們的應用程序,它是一個調用System.Threading.WaitHandle.WaitOne(Int32)讓我們陷入困境。 有關如何在沒有Visual Studio注意的情況下將Service Pack版本中引入的API引用泄漏到代碼中的更多詳細信息,請參閱Krzysztof Cwalina的帖子 。
好消息是,正如Marc提到的那樣,FxCop有一個新的規則來檢測這些泄漏。 壞消息是,當您使用.NET Framework 3.5時,FxCop 1.36中的規則被破壞了。 但是,David Kean描述了如何編輯幾個XML配置文件來解決問題 。 我按照說明操作,現在FxCop檢測到我對Service Pack API的引用。
怎么樣這個 ? (FxCop的多目標規則)
您可以使用此處的代碼來檢測已安裝的.NET框架。
string Fx35RegistryKey = @“HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Microsoft \\ NET Framework Setup \\ NDP \\ v3.5”; object Fx35ServicePack = Registry.GetValue(Fx35RegistryKey,“SP”,null);
if(Fx35ServicePack == null ||(int)Fx35ServicePack <1)拋出新的異常(“.NET Framework 3.5 SP1是必需的。”);
我沒有嘗試過另一種選擇。 Visual Studio文檔說您可以使ClickOnce安裝程序專門針對.NET 3.5SP1框架。 按照鏈接,搜索“Targeting .NET Framework Version 3.5 SP1”。 從本質上講,它表示執行以下任何操作都會強制安裝程序安裝3.5SP1:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.