Visual Studio项目配置中TargetFrameworkVersion的影响,及App.Config文件自行修改的影响、sku的作用

 【问题】:

我有我的项目目标.net4.0。我更新到4.5,并在VS中项目属性里配置后发现:

1、项目的csproj文件中:(非手动添加)

<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>

2、APP.config文件中:(非手动添加)

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

除了更改TargetFrameworkVersion,我很好奇这是否多余。我的理解是,如果运行时找不到supportedRuntime,它将使用用于构建exe的.net版本。所以在这个例子中,exe是用4.5构建的,它也说要用4.5。不管我有没有这个,在只有4.0的机器上运行它,它的行为会有不同吗?

【答】

MSDN文档对此没有给出任何好的解释,但我发现了Scott Hanselman的一篇博客文章,标题为“.NET版本控制和多目标-.NET 4.5是对.NET 4.0的就地升级”,其中揭示了:

如果您正在制作一个客户端应用程序,如WinForms、Console、WPF等,这都是自动的。你的应用程序。config包含您需要.NET4.5的事实,您甚至会得到安装提示。

因此,配置条目是关于如果计算机上有.NET 4.0(但不是.NET 4.5)的用户尝试运行您的.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。

如果您没有配置文件条目,那么使用.NET 4.0的用户将能够运行您的应用程序,但如果您尝试调用4.5中添加的任何方法或使用任何类型,则会出现运行时异常。这将是您作为开发人员和测试人员的一大痛苦。只有当您有特定的应用程序必须在.NET 4.0上运行的要求时,才应该这样做和如果有新的4.5特性,则必须利用这些特性(并且您必须小心异常处理和在两个版本上广泛测试)。

如果你想在.NET 4.0上运行,但不需要任何新的4.5 API,那么你的生活就简单多了:只需转到“项目属性”的“生成”选项卡,并以.NET 4.0为目标。然后编译器将确保你不调用4.0中不存在的任何API,你的应用程序将在.NET 4.0和.NET 4.5计算机上成功运行。

参见外文:.net - What happens if I remove the auto added supportedRuntime element? - Stack Overflow

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值