.NET Framework 的 Quirk Version
来源:互联网 发布:访客网络设置 编辑:程序博客网 时间:2024/06/05 05:36
今天在CSDN上看到一个帖子 :".net 4.0和4.5不同版本的Uri.ToString行为不同?", 调试.NET Framework 源代码发现,是这句代码起的作用
internal static bool ShouldUseLegacyV2Quirks { get { return UriParser.s_QuirksVersion <= UriParser.UriQuirksVersion.V2; } }
那这个s_QuirksVersion又是怎么来的呢,查找源代码,发现在静态构造函数中,有这样一句
UriParser.s_QuirksVersion = (BinaryCompatibility.TargetsAtLeast_Desktop_V4_5 ? UriParser.UriQuirksVersion.V3 : UriParser.UriQuirksVersion.V2);
原来运行时判断了程序使用的.NET Framework版本!
那它又是怎么得到版本信息的呢?
其实是因为编译时会将这样一段信息加入执行文件中
[assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]
当.NET Framework需要决定使用何种Quirk Version时,会读取目标程序的TargetFrameworkAttribute,得到它编译时针对 .NET Framework 的版本。
Assembly entryAssembly = Assembly.GetEntryAssembly(); TargetFrameworkAttribute[] array = (TargetFrameworkAttribute[])entryAssembly.GetCustomAttributes(typeof(TargetFrameworkAttribute), false); Console.WriteLine(array[0].FrameworkName);
我想这样做的原因可能是为了保证升级.NET Framework版本后,旧程序还能按原有方式运行,而不会被新的行为影响。
有兴趣的朋友可以将下列代码在不同.NET Framework框架下运行看看。
class Program { static void Main(string[] args) { List<int> list = new List<int>() { 1, 2, 3 }; list.ForEach(i => { Console.WriteLine(i); if (i < 3) { list.Add(i + 1); } }); Console.ReadLine(); } }
0 0
- .NET Framework 的 Quirk Version
- IE的quirk模式
- .NET Framework version 4.0 SP1
- 如何判断所安装的.NET Framework Version?
- How to Check .net framework version installed
- pcie的quirk函数的执行优先级
- 坑爹的IE quirk模式
- 修改ie9默认的quirk模式
- Strict和Quirk模式下的差异
- Running Multiple Version of .Net Framework in IIS 6.0
- How to determine which version of .net framework are installed
- Visual Studio 2010打开项目时提示“此项目针对的是.Net Framework,version=4.0”
- Visual Studio 2010打开项目时提示“此项目针对的是.Net Framework,version=4.0”
- .net Framework的网页
- .NET Framework的版本
- .NET Framework 的容器
- NET Framework 的源代码
- .NET Framework 的容器
- 蓝桥杯练习(vip) 字符串对比
- js中this的用法
- js控制容器隐藏出现防止样式变化
- spring3 + Quartz1.8.6 Schuduler Example
- 读jQuery Blog之New Demo Page
- .NET Framework 的 Quirk Version
- B. Garland
- 数学之路(3)-SVR-支持向量回归
- Leetcode-Reorder List
- UIKit 06、使用UITabBarController 和 自定义标签栏控件 创建多视图的iOS应用程序
- Sony 面经
- 【分享】国家自然科技资源平台实验材料数据库
- leetcode之时间复杂度为O(nlogn)的链表排序
- 如何重用其他项目中的源代码