框架升级后某个类型所在程序集发生转移,应用还能正常运行吗?
所谓类型转移(Type Forwarding)就是将定义在某个程序集中的类型转移到另一个程序集中。我们先通过一个简单的实例让读者朋友们对类型转移有一个感官上的认识。我们利用Visual Studio创建一个针对.NET Framework 3.5的控制台应用,并编写如下一端简单的程序输出两个常用的类型(Function<T>和TimeZoneInfo)所在程序集的名称。现在我们直接运行这个程序,会在控制台上得到如下所示的输出结果,可以看出.NET Framework 3.5(CLR 2.0)环境下的这两个类型定义在程序集System.Core.dll中。 1: public class Program 2: {
3: static void Main(string[] args) 4: {
5: Console.WriteLine(typeof(Func<>).Assembly.FullName); 6: Console.WriteLine(typeof(TimeZoneInfo).Assembly.FullName); 7: }
8: }
输出结果: 现在我们对该程序的配置文件(App.config)作如下的修改,其目的在于采用CLR 4.0来运行该程序。再次运行该程序集之后,我们会在控制台上得到不一样的输出结果。通过如下所示的输出结果我们可以看出当.NET Framework从3.5升级到4.0的时候,将原本定义在程序集System.Core.dll中的部分类型转移到了程序集mscorelib.dll之中。 2: startupsupportedRuntime version="v4.0"/>
typeof(Foobar).AssemblyQualifiedName); 8: } 1: .class extern forwarder Lib.Foobar 4: } 当App.exe被执行的时候,由于元数据体现的依然是针对程序集Lib.dll的引用,所以CLR依然会试图从该程序集中加载类型Foobar。但是通过分析程序集Lib.dll的元数据,CLR知道Foobar已经被转移到程序集Lib2.dll中,所以定义在其中的同名类型Foobar最终会被加载。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 为什么不在ASP.NET MVC项目的Content文件夹
- asp.net-core – 构建asp.net核心错误
- 将Asp.net应用程序移动到负载平衡的环境中
- ASP.net角色和项目
- asp.net-mvc – WebGrid和EF4属性
- asp.net-mvc – ASP.NET MVC 4 – 使用子操作进行模态保存后
- asp.net-mvc – ReadOnly(true)是否与Html.EditorForModel一
- asp.net-mvc – POST操作方法中强类型的ViewModel仅包含空值
- asp.net webapi UseOAuthBearerAuthentication vs UseJwtBe
- ASP.NET调试与IIS超时
- asp.net-mvc – 如何使用Linq to SQL配置mvc min
- asp.net-mvc – ASP.net MVC RTM测试命名约定
- asp.net-web-api – 将Application Insight与ASP
- asp.net – 如何在asp net core api中使用Create
- asp.net – Html.Partial vs Html.RenderPartial
- asp.net – 从MVC视图中的模型访问displayName属
- Asp.Net Core 第02局:Program
- .net – SignalR长轮询在5秒内断开连接
- asp.net-core-mvc – ASP NET Core 2.0 appsetti
- asp.net-mvc-3 – 剃刀引擎 – 如何根据不同的条