【问题标题】:Why an application compiled for .NET 3.5 doesn't work when only .NET 4 is installed?为什么仅安装 .NET 4 时为 .NET 3.5 编译的应用程序不起作用?
【发布时间】:2012-07-13 13:41:02
【问题描述】:

MSDN page,关于 .NET Framework 版本,我们知道每个版本都包含以前版本的所有功能。

与以前版本的 .NET Framework 不同,.NET Framework 4 不允许使用以前版本的 .NET Framework 构建的应用程序向前迁移并在未安装以前版本的情况下在其上运行

这是为什么呢?

【问题讨论】:

标签: .net .net-4.0 .net-3.5 .net-framework-version


【解决方案1】:

默认情况下,它们需要不同的运行时。

3.5 应用程序的运行时是 2.0 运行时,它与 4.0 运行时不兼容。

您可以按照 João Angelo 在 his answer 中的说明重新定位。

【讨论】:

  • 这并不完全正确。 .NET 4 运行时(大部分)与 .NET 2 程序集兼容,但在没有明确选择加入的情况下不会运行它们。
【解决方案2】:
  • .NET 2.0
  • .NET 3.x 基于 .NET 2.0,因此两者都需要安装 .NET 2.0
  • .NET 4.0 使用自己的 .NET 运行时版本,因此您可以独立安装它
  • .NET 4.5 updates 4.0 的运行时

【讨论】:

    【解决方案3】:

    正如在其他答案中已经解释的那样,它们是不同的运行时,因此默认情况下不支持该应用程序,因为未安装 .NET 3.5 使用的 2.0 运行时。

    但是,您可以将以下内容添加到应用程序配置中以强制应用程序使用 .NET 4.0 运行时:

    <startup>
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    </startup>
    

    但是,由于不同运行时之间的变化,这可能会导致应用程序崩溃,因此最安全的是使用应用程序所针对的运行时。

    【讨论】:

      【解决方案4】:

      与以前版本的 .NET Framework 不同,.NET Framework 4 不允许使用以前版本的 .NET Framework 构建的应用程序向前迁移并在未安装以前版本的情况下在其上运行

      确实如此,但您必须明确允许它使用 .NET 4 运行时运行。由于框架有一个新的运行时,如果您的应用程序针对的是旧版本,您必须选择允许这样做。

      您可以通过让您的应用配置指定正确的supportedRuntime 变量来做到这一点,即:

      <configuration>
         <startup>
            <supportedRuntime version="v4.0"/>
            <supportedRuntime version="v2.0.50727"/>
         </startup>
      </configuration>
      

      没有这个,运行时会:

      如果应用程序配置文件中不存在该元素,则使用用于构建应用程序的运行时版本。

      因为您使用 CLR 2 构建,所以只允许 2.0 运行时,因此如果用户没有 .NET 3.5sp1,它会失败。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-08
        • 1970-01-01
        • 2012-03-22
        • 1970-01-01
        • 2012-04-15
        • 2022-11-02
        • 1970-01-01
        相关资源
        最近更新 更多