【问题标题】:Avoiding .NET versioning hell避免 .NET 版本控制地狱
【发布时间】:2010-03-11 11:04:29
【问题描述】:

因此,有时(通常!)您希望针对特定的 .NET 版本(例如 3.0),但由于某些 .NET 服务包,您会遇到以下问题:

  • Dispatcher.BeginInvoke(Delegate, Object[])
  • System.Threading.WaitHandle.WaitOne(Int32)

现在,JIT 编译器会检测到这些,因此在 Visual Studio 中针对 .NET 3.0 构建并不能保证它会在仅 .NET 3.0 的系统上运行。

没有

  • 确认您使用的每个功能,或
  • 将您的开发环境限制为 .NET 3.0(这很糟糕,因为您还必须为其他项目进行开发)

避免使用扩展的最佳方法是什么?

谢谢!

【问题讨论】:

    标签: .net visual-studio dll


    【解决方案1】:

    Microsoft 倾向于假设,如果您安装了 .NET XXX,那么您必须使用最新的服务包,因为 Windows Update 会将它们作为关键更新推送给您。我知道这是一个脆弱的假设,有时会失败,但这是应该发生的。

    我们的产品目前以 .NET 3.5 SP1 为目标,因此我们会惊讶地发现目标环境仍在运行 .NET 3.5 RTM。

    【讨论】:

    • 这有点与硬件驱动程序结合使用。即使是现成的未连接互联网的 PC,它也必须工作
    • 如果您的安装程序技术允许,您可以尝试将 .NET 3.0 SP2 作为先决条件嵌入到您的安装程序中。例如,InstallShield 允许您从 Web 下载或独立嵌入。
    【解决方案2】:

    此功能自 VS 2008 SP1 起内置于 Visual Studio 中,并且在 FxCop 1.36 中也可用。更多详情请查看David Kean's blog post

    alt text http://davesbox.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/blog/ErrorList_5F00_3.png

    【讨论】:

    • 很高兴能提供帮助。我更新了答案以包括对 FxCop 的引用。
    【解决方案3】:

    有一种方法可以告诉 Windows 使用哪个 .Net 版本。这类似于使用 xmllike 在 windows\system32 中创建一个名为 dllhost.exe.config 的文件:

    <? xml version = "1.0" ?>
    <configuration>
    <startup>
    <SupportedRuntime version = XXXXXX>
    </startup>
    </configuration>
    

    见:http://msdn.microsoft.com/en-us/library/w4atty68.aspx

    【讨论】:

      【解决方案4】:

      在发布版本之前,使用与目标用户群的最小公分母相对应的适当版本的 Visual Studio 编译您的应用程序。

      只需准备好一台虚拟机,例如 Visual Studio 2005,手头没有 SP,然后在部署之前从那里编译解决方案。

      【讨论】:

        【解决方案5】:

        这有帮助吗:Versioning Controlled Build

        【讨论】:

        • 请说出您认为它可能有什么帮助。它看起来不相关。
        猜你喜欢
        • 1970-01-01
        • 2017-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-11
        • 1970-01-01
        相关资源
        最近更新 更多