检测.NET Framework 3.5 SP1依赖性(cmp.3.5 w / o SP1)

时间:2008-10-24 11:57:17

标签: .net visual-studio-2008 dependencies fxcop

我在我的机器上使用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,或其他任何原因)。

对于这个问题,我的谷歌权力还不够强,任何暗示?

5 个答案:

答案 0 :(得分:5)

我遇到了同样的问题,我找到了解决方案。对于我们的应用程序,它是一个调用System.Threading.WaitHandle.WaitOne(Int32)让我们陷入困境。有关如何在没有Visual Studio注意的情况下将Service Pack版本中引入的API引用泄漏到代码中的更多详细信息,请参阅Krzysztof Cwalina's post

好消息是,作为Marc mentioned is his answer,FxCop有new rule来检测这些泄漏。坏消息是,当您使用.NET Framework 3.5时,FxCop 1.36中的规则被破坏了。但是,David Kean描述了如何将几个XML配置文件编辑为fix the problem。我按照说明操作,现在FxCop检测到我对Service Pack API的引用。

答案 1 :(得分:2)

this怎么样? (FxCop的多目标规则)

答案 2 :(得分:1)

您可以使用找到的代码here来检测已安装的.NET框架。

答案 3 :(得分:0)

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是必需的。”);

答案 4 :(得分:0)

我还没有尝试过另一种选择。 Visual Studio documentation表示您可以使ClickOnce安装程序专门针对.NET 3.5SP1框架。按照链接,搜索“Targeting .NET Framework Version 3.5 SP1”。从本质上讲,它表示执行以下任何操作都会强制安装程序安装3.5SP1:

  • 在“发布选项”对话框中指定错误URL。
  • 在“发布选项”对话框中指定套件名称。
  • 在“发布选项”对话框中创建桌面快捷方式。
  • 从“应用程序文件”对话框中的散列中排除文件。
  • 清除签名页面上的签署ClickOnce清单复选框。
  • 添加对System.Data.Entity程序集的引用。