首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行时使用的应用程序框架版本目标和Net framework版本

运行时使用的应用程序框架版本目标和Net framework版本
EN

Stack Overflow用户
提问于 2016-07-07 18:53:11
回答 1查看 78关注 0票数 0

我在.Net 4.0中构建了一个小示例应用程序来测试一些任务异常处理。我写了下面的代码

代码语言:javascript
复制
       Task.Factory.StartNew(() =>
       {
           throw new Exception("Exception");
       }
       Thread.Sleep(100);
       GC.Collect();
       GC.WaitForPendingFinalizers();

我预计,由于我的应用程序是NET4.0,我会得到一个未处理的异常,但什么也没有发生。我在文章UnobservedTaskException is not killing the process中看到,即使你的应用程序是.Net 4.0,如果你安装了Net Framework4.5,它以后也会在上面运行。

事实上,当我补充说:

代码语言:javascript
复制
 <runtime> 
    <ThrowUnobservedTaskExceptions enabled="true"/> 
 </runtime> 

与4.5中的应用程序一样,会抛出异常

谁能解释一下应用程序版本和安装的框架版本的一般原则是什么?

EN

回答 1

Stack Overflow用户

发布于 2016-07-07 20:50:11

“一般原则”是,当您最初在项目中以4.0为目标时,.NET版本4.5和更高版本的行为将尽可能像.NET 4.0。多亏了编译器嵌入到程序集中的[TargetFrameworkAttribute](https://msdn.microsoft.com/en-us/library/system.runtime.versioning.targetframeworkattribute(v=vs.110%29.aspx),它才知道目标是什么。

当然,这是非常重要的,.NET 4.5中的设计变化是严重的 breaking。你不会希望之前忽略了这个异常并一直在运行的.NET 4.0应用程序在运行在更新的运行时版本时突然失败。比您想象的要常见得多,特别是在没有合适的方法来发现这些异常的情况下。这是一个非常糟糕的设计选择,微软在4.5版本中对其进行了更正

它只有一些配置设置,您可以使用它们来覆盖这种兼容性行为,ThrowUnobservedTaskExceptions就是其中之一。将行为反向移植到4.0应用程序被认为是有用的,它肯定是有用的。如果你在一台只有4.0版本的机器上运行你的应用程序,那么它不会有任何效果。另一个例子是is here

执行此操作的代码是located here。内部System.CLRConfig类是4.5中的新功能。实际的实现在CLR中,因为解析.config文件的代码也位于CLR中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38243638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档