Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 当被4.5或4.6应用程序使用时,同一个程序集的行为如何会有所不同?_.net_.net 4.0_.net 4.5_.net 4.6 - Fatal编程技术网

.net 当被4.5或4.6应用程序使用时,同一个程序集的行为如何会有所不同?

.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文件中指定的版本只会触

引述

对于以.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文件中指定的版本只会触发一个消息框——这会如何影响程序集的行为?

此页说明了一切

区域性和基于任务的异步操作

基于任务的异步编程模式使用任务和 在线程上异步执行委托的任务对象 池线程。运行特定任务的特定线程是 事先不知道,但仅在运行时确定

对于以.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中指定的运行时根本不会影响这一点。