如果我删除自动添加的supportedRuntime元素会怎样?

use*_*479 62 .net

我有我的项目目标4.0.我将其更新为4.5并添加了VS.

<startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
</startup>
Run Code Online (Sandbox Code Playgroud)

除了改变TargetFrameworkVersion之外,我很好奇这是多余的.我的理解是,如果运行时没有找到supportedRuntime,它会使用用于构建exe的.net版本.所以在这种情况下,exe是使用4.5构建的,它也说使用4.5.无论我是否拥有此功能,它的行为都会有所不同,并在只有4.0的机器上运行吗?

Joe*_*ite 86

MSDN文档没有对此做出任何好的解释,但我发现Scott Hanselman的博客文章" .NET版本和多目标 - .NET 4.5是对.NET 4.0的就地升级 ",它揭示了:

如果您正在制作客户端应用程序,如WinForms,Console,WPF等,这都是自动的.您的app.config包含您需要.NET 4.5的事实,您甚至会得到安装它的提示.

因此,配置条目是关于如果用户在其计算机上(而不是.NET 4.5)上运行.NET 4.0的用户尝试运行.NET 4.5应用程序时会发生什么..NET 4.0和.NET 4.5都是基于CLR的第4版构建的,因此它们在理论上是兼容的; 相同的二进制格式和所有这些.针对.NET 4.0构建的二进制文件与针对.NET 4.5构建的二进制文件之间的唯一区别是它们引用的库.

因此,为.NET 4.5编译的应用程序可以在仅安装了.NET 4.0的计算机上运行.但是,如果您尝试使用4.0中不存在的任何API,它将获得运行时异常.

如果您有此配置文件条目,并且.NET 4.0用户尝试运行您的应用程序,则该应用程序将无法运行,系统将提示用户安装.NET 4.5.(请参阅Scott博客文章中的截图.)对于大多数人来说,这是一个很好的默认设置.

如果您没有配置文件条目,那么使用.NET 4.0的用户将能够运行您的应用程序,但如果您尝试调用任何方法或使用4.5中添加的任何类型,则会获得运行时异常.对于您作为开发人员和测试人员而言,这将是一个巨大的痛苦.你只能这样做,如果你有特殊要求,你的应用程序必须在.NET 4.0运行以及如果他们目前必须采取的新功能,4.5优势(和你必须要小心异常处理和对两个版本进行广泛的测试).

如果您希望能够在.NET 4.0上运行,但不需要任何新的4.5 API,那么您的生活就会简单得多:只需转到Project Properties的Build选项卡,然后定位.NET 4.0.然后编译器将确保您不调用4.0中不存在的任何API,并且您的应用程序将在.NET 4.0和.NET 4.5计算机上成功运行.