检测 .NET Framework 3.5 SP1 依赖项 (cmp.3.5 不带 SP1)
-
04-07-2019 - |
题
我在我的机器上使用的是 3.5 SP1,而我们的客户目前使用的是没有 SP1 的 3.5。我不知道在 VS2008 中有什么方法可以将解决方案或项目定位到没有 SP1 的 3.5,我只安装了带有 SP1 的 3.5。
如果我们使用 3.5 w/o SP1 中不可用的函数或构造函数,代码将无法正常工作。
也就是说,我想检测 编译时间 没有 SP1 就无法工作。
到目前为止,我们已经完成了测试(在虚拟机或单独的机器中)以查看应用程序是否会中断,并且当我们使用 SP1 之前不可用的部分 API 时,有时它确实会中断。问题是它仅在代码实际运行时(运行时)中断,而不是在加载程序集时中断。
一种解决方案是拥有一台装有 VS2008 w/o SP1 的机器并尝试编译该项目。不过,我更喜欢一些工具来帮助我通过分析源代码或我们生成的程序集来检测对 3.5 SP1 的依赖关系(由于使用新的 API 或其他原因)。
我的谷歌力量对这个问题还不够强大,有什么提示吗?
解决方案
我遇到了同样的问题,我找到了解决方案。对于我们的应用程序,它是一个调用System.Threading.WaitHandle.WaitOne(Int32)让我们陷入困境。有关如何在没有Visual Studio注意的情况下泄漏到代码中的API的引用的更多详细信息,请参阅 Krzysztof Cwalina的帖子。
好消息是, Marc提到的是他的答案,FxCop有一个新规则,用于检测这些泄漏。坏消息是,当您使用.NET Framework 3.5时,FxCop 1.36中的规则被破坏了。但是,David Kean描述了如何编辑几个XML配置文件到解决问题。我按照说明操作,现在FxCop检测到我对Service Pack API的引用。
其他提示
怎么样这个? (FxCop的多目标规则)
您可以使用此处找到的代码进行检测安装的.NET框架。
string Fx35RegistryKey = @ <!> quot; HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ v3.5 <!> quot ;; object Fx35ServicePack = Registry.GetValue(Fx35RegistryKey,<!> quot; SP <!> quot;,null);
if(Fx35ServicePack == null ||(int)Fx35ServicePack <!> lt; 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 程序集的引用。