我在我的机器上使用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,或其他任何原因)。
对于这个问题,我的谷歌权力还不够强,任何暗示?
答案 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: