.net 当被4.5或4.6应用程序使用时,同一个程序集的行为如何会有所不同?
引述 对于以.NET Framework 4.6 RC为目标的应用程序,.net 当被4.5或4.6应用程序使用时,同一个程序集的行为如何会有所不同?,.net,.net-4.0,.net-4.5,.net-4.6,.net,.net 4.0,.net 4.5,.net 4.6,引述 对于以.NET Framework 4.6 RC为目标的应用程序,Task和Task 对象继承调用线程的区域性和UI区域性。这个 针对.NET Framework早期版本的应用程序的行为, 或者不针对特定版本的.NET Framework的 未受影响的 我一直认为在4.0、4.0.1、4.0.2、4.0.3、4.5、4.5.1、4.5.2和4.6的组装级别上只存在v4.0.30319,而4.6只是4.0-4.5.2的就地更新 如果未安装SKU,则在app.config文件中指定的版本只会触
Task
和Task
对象继承调用线程的区域性和UI区域性。这个
针对.NET Framework早期版本的应用程序的行为,
或者不针对特定版本的.NET Framework的
未受影响的
我一直认为在4.0、4.0.1、4.0.2、4.0.3、4.5、4.5.1、4.5.2和4.6的组装级别上只存在v4.0.30319,而4.6只是4.0-4.5.2的就地更新
如果未安装SKU,则在app.config文件中指定的版本只会触发一个消息框——这会如何影响程序集的行为?此页说明了一切
区域性和基于任务的异步操作
基于任务的异步编程模式使用任务和
在线程上异步执行委托的任务对象
池线程。运行特定任务的特定线程是
事先不知道,但仅在运行时确定
对于以.NET Framework 4.6 RC或更高版本为目标的应用程序,
区域性是异步操作上下文的一部分。换句话说
换句话说,从应用程序开始,目标是.NET Framework 4.6 RC,
默认情况下,异步操作将继承
来自的线程的CurrentCulture和CurrentUICulture属性
它们被发射了。如果当前区域性或当前UI区域性
与系统文化不同,当前文化是跨线程的
边界,并成为线程池线程的当前区域性
即执行异步操作
以下示例提供了一个简单的说明它使用
TargetFrameworkAttribute属性以.NET Framework 4.6为目标
RC.该示例定义了Func委托、formatDelegate、,
返回一些格式化为货币值的数字。榜样
将当前系统区域性更改为法语(法国)或(如果需要)
法语(法国)已经是当前的文化,英语(美国)
国家)。然后:
- 直接调用委托,使其在主应用程序线程上同步运行李>
- 创建在线程池线程上异步执行委托的任务李>
- 通过调用task.RunSynchronously方法,创建在主应用程序线程上同步执行委托的任务
您可以从代码示例中看到如何将程序显式标记为.NET 4.6目标。然后CLR使用新的行为。对于没有此类属性的所有程序集,或者值不是4.6,旧的行为将保留。对于我来说,尝试还为时过早,但简单的解释是,它会注意到。从参考资料中可以看出,它已经用于打开功能。@HansPassant这意味着框架中充满了运行时版本检查(可能使用
AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName
?),模拟旧版本?我还没有注意到,如果应用程序的目标是4.5或更高版本,System.Uri决定如何表现出不同的行为。程序引用的程序集现在如何表现出不同的行为?例如,System.Uri(在System.dll中)开始保留具有两个以上连续点(例如)的路径段,这些点从4.5开始——LinqPad(目标为4.0)不保留它们,但使用的是与版本4.5.2相同的System.dll。(我无法使用ILSpy在System.Uri中发现任何框架检测代码)可能会有许多破坏性的更改,每个更改都有自己的修复技巧。我不能给你一个通用的解决方案,微软也不能。你仍然没有以任何方式回答我的问题。当我安装了4.6之后,我的系统上就不再有4.0或4.5了。怎么做的?TargetFrameworkAttribute更改了什么?@spring76,.NET 4.0/4.5行为保留在.NET 4.6中,而通过更改程序集中的TargetFrameworkAttribute可以启用新行为。您在app.config中指定的运行时根本不会影响这一点。