[英]Executable running on either .NET Framework 3.5 or 4.0
我们在现场有各种版本的基础应用程序:
我们通过安装程序分发更新,安装程序在其中嵌入.NET可执行文件。 运行此安装程序的PC可能具有以下基本应用程序的组合:
我需要确保安装程序中嵌入的.NET可执行文件可靠运行。
我发现的方法建议将以下内容添加到app.config
文件中:
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
几个问题:
这是否意味着它将使用.NET Framework 4.0(如果存在),否则将使用.NET Framework 3.5(或任何以前使用2.0.50727
CLR的框架)? IOW,这些标签按优先级排序吗?
构建计算机上的.NET Framework版本是否对应用程序有任何运行时影响,或者app.config
文件中的版本的硬编码是否始终优先?
如果我添加了依赖于.NET 4.0特有的功能的代码,会发生什么? 在app.config
包含2.0.50727
版本(如上所示)会导致编译时错误或运行时错误(仅当未安装.NET 4.0时)?
是的,他们按优先顺序排列。 使用简单的控制台应用程序尝试最简单:
using System; class Test { static void Main() { Console.WriteLine(Environment.Version); } }
使用.NET 3.5编译它,然后使用当前配置运行它,它将显示4.0 - 然后切换行,它将显示2.0。 有关更多详细信息,请参阅此MSDN文章 。
您针对应用程序定位的框架版本非常重要。 如果您的配置指定您支持.NET 2,但您的目标是.NET 4,则该应用程序将无法启动。
如果不针对.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.