簡體   English   中英

檢測.NET Framework 3.5 SP1依賴性(cmp.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:

  • 在“發布選項”對話框中指定錯誤URL。
  • 在“發布選項”對話框中指定套件名稱。
  • 在“發布選項”對話框中創建桌面快捷方式。
  • 從“應用程序文件”對話框中的散列中排除文件。
  • 清除簽名頁面上的簽署ClickOnce清單復選框。
  • 添加對System.Data.Entity程序集的引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM