繁体   English   中英

可在.NET Framework 3.5或4.0上运行的可执行文件

[英]Executable running on either .NET Framework 3.5 or 4.0

我们在现场有各种版本的基础应用程序:

  • 1.0版捆绑了.NET Framework 3.5
  • 2.0版捆绑了.NET Framework 4.0

我们通过安装程序分发更新,安装程序在其中嵌入.NET可执行文件。 运行此安装程序的PC可能具有以下基本应用程序的组合:

  • 版本1.0和版本2.0(.NET 3.5 / .NET 4.0)
  • 仅限1.0版(仅限.NET 3.5)
  • 仅限2.0版(仅限.NET 4.0)

我需要确保安装程序中嵌入的.NET可执行文件可靠运行。

我发现的方法建议将以下内容添加到app.config文件中:

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

几个问题:

  1. 这是否意味着它将使用.NET Framework 4.0(如果存在),否则将使用.NET Framework 3.5(或任何以前使用2.0.50727 CLR的框架)? IOW,这些标签按优先级排序吗?

  2. 构建计算机上的.NET Framework版本是否对应用程序有任何运行时影响,或者app.config文件中的版本的硬编码是否始终优先?

  3. 如果我添加了依赖于.NET 4.0特有的功能的代码,会发生什么? app.config包含2.0.50727版本(如上所示)会导致编译时错误或运行时错误(仅当未安装.NET 4.0时)?

  1. 是的,他们按优先顺序排列。 使用简单的控制台应用程序尝试最简单:

     using System; class Test { static void Main() { Console.WriteLine(Environment.Version); } } 

    使用.NET 3.5编译它,然后使用当前配置运行它,它将显示4.0 - 然后切换行,它将显示2.0。 有关更多详细信息,请参阅此MSDN文章

  2. 针对应用程序定位的框架版本非常重要。 如果您的配置指定您支持.NET 2,但您的目标是.NET 4,则该应用程序将无法启动。

  3. 如果不针对.NET 4,您将不会依赖.NET 4特有的功能,在这种情况下,它不会在.NET 2上运行。

第3点是不是严格准确,有事情可以做,这将是不同基于.NET哪个版本的运行。 例如,将应用更改为:

using System;
using System.Collections.Generic;

class Test
{
    static void Main()
    {
        object o = new List<string>();
        Console.WriteLine(o is IEnumerable<object>);
    }
}

当使用.NET 2运行时将打印False(因为IEnumerable<T>在.NET 2中是不变的)但是当使用.NET 4运行时,由于通用的协方差,它将打印True。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM