代码之家  ›  专栏  ›  技术社区  ›  L. Kolmodin

检测.NET Framework 3.5 SP1依赖项(CMP。3.5 W/O SP1)

  •  5
  • L. Kolmodin  · 技术社区  · 17 年前

    我在我的机器上使用的是3.5SP1,而我们的客户目前使用的是不带SP1的3.5。 在VS2008中,我不知道如何将解决方案或项目目标定为不带SP1的3.5,只安装了带SP1的3.5。

    如果我们使用3.5w/o sp1中不可用的函数或构造函数,代码将无法正常工作。

    也就是说,我想在 编译时间 如果没有SP1就无法工作。

    到目前为止,我们已经(在一台虚拟机或单独的机器中)进行了测试,以查看应用程序是否会中断,并且当我们使用了在sp1之前不可用的部分api时,它有时确实会中断。问题是,它只在代码实际运行时(在运行时)中断,而不是在加载程序集时中断。

    一种解决方案是使用带有VS2008 w/o SP1的机器,并尝试编译该项目。 但是,我更喜欢一些工具来帮助我通过分析源代码或我们生成的程序集来检测对3.5SP1的依赖性(由于使用了新的API或其他任何工具)。

    我的谷歌能力在这个问题上还不够强大,有什么提示吗?

    5 回复  |  直到 16 年前
        1
  •  5
  •   Community Mohan Dere    9 年前

    我也遇到了同样的问题,我找到了解决办法。对于我们的应用程序,是对System.Threading.WaitHandle.WaitOne(Int32)的调用给我们带来了麻烦。有关Service Pack版本中引入的API引用如何在不引起Visual Studio注意的情况下泄漏到代码中的详细信息,请参见 Krzysztof Cwalina's post .

    好消息是, Marc mentioned is his answer ,FXCOP有一个 new rule 检测到这些泄漏。坏消息是,当您以.NET Framework 3.5为目标时,fxcop 1.36中的规则被破坏。但是,DavidKean描述了如何将两个XML配置文件编辑为 fix the problem . 我按照说明操作,fxcop现在检测到我对ServicePackAPI的引用。

        2
  •  2
  •   Marc Gravell    17 年前

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

        3
  •  1
  •   Thedric Walker    17 年前

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

        4
  •  0
  •   Ben Wright    17 年前

    string fx35registrykey=@“hkey_local_machine\software\microsoft\net framework setup\ndp\v3.5”; 对象fx35servicepack=registry.getValue(fx35registrykey,“sp”,空);

    如果(fx35servicepack==null(int)fx35servicepack<1)引发新异常(“.NET Framework 3.5 SP1是必需的”);

        5
  •  0
  •   Don Kirkby    17 年前

    还有一个选择我还没试过。这个 Visual Studio documentation 说您可以让ClickOnce安装程序专门针对.NET 3.5SP1框架。按照链接搜索“Targeting.NET Framework 3.5 SP1”。基本上,它说,执行以下任何操作都将强制安装程序安装3.5sp1:

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