.NET:强签名程序集的加载问题 之 版本重定向
2014-05-20 10:22
162 查看
背景
多数解决方案会包含多个项目,某些支持插件架构的解决方案中,更是包含多个插件项目,这些项目会使用一些第三方NuGet Packages,如果管理不慎,解决方案中会出现多个版本的引用,这在编译期间不会引起问题,甚至开发调试期间也不会有问题,不过在发布过程会出现一些诡异的问题,如:未能加载xxx.dll等问题。本文简单的介绍一下解决思路。继续看之前可以先看看这篇文章:/article/4737009.html。
版本重定向
强签名程序集的标识包含了版本号,.NET 在执行程序集探测之前,会先根据版本重定向配置解析出需要加载的版本号。<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="myAssembly" publicKeyToken="32ab4ba45e0a69a1" culture="neutral" /> <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/> <codeBase version="2.0.0.0" href="http://www.litwareinc.com/myAssembly.dll"/> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
解析出版本号以后,剩下的就是经典的程序集探测过程了。需要说明的是:即使最终加载出重定向后的版本的程序集,程序也不见得能正常运行,因为:重定向后的程序集必须和编译时使用的程序集二进制兼容,所谓二进制兼容也容易理解,就是编译时使用的成员签名不能发生变化。
相关文章推荐
- 程序集强签名-.net版本问题
- 深入.NET程序集加载:你知道.NET程序集加载的确切时机吗,来看看一段代码存在的问题
- 关于VS220113无法启动IIS Express,系统日志:工作进程未能预加载 .Net 运行时版本 v4.0.30128问题
- windows 2003 IIS 下新建网站不能选择.net 框架版本的问题
- [转]同时安装并运行.net 1.1 和 .net 2.0 两个版本的问题
- 关于Linux内核可加载模块的版本问题
- 动态加载程序集[仿Petshop架构应用开发遇到的问题]
- 加载模块的时候出现版本不匹配的问题
- Assembly不能加载程序集的问题
- .Net各版本在一台服务器上的兼容问题
- Assembly.Load()不能加载程序集的问题
- 关于.net的几个重要问题的bigeagle版本
- 未能加载.NET基类问题
- .NET 3.5的版本问题
- ArcGIS Engine打补丁后在.NET中编译提示“版本高于所引用的程序集”
- “在强签名的程序集上运行单元测试失败”问题调查
- 在JRE1.4.2以上版本中解决Javascript调用已签名Applet方法时提示没有权限问题
- .Net环境水晶报表在98下发布,出现"不能加载报表..."问题的解决
- .NET 动态加载程序集 (一)
- Assembly.Load()不能加载程序集的问题