.NET运行时版本冲突及绑定重定向配置相关咨询
.NET程序集版本绑定问题解答
问题1:项目A调用项目B时,运行时会用哪个版本的NLog?
- NLog是强命名程序集,.NET对这类程序集的版本匹配要求很严格。在你说的这种情况里,如果没配置任何程序集绑定重定向:
- 项目A启动后,先加载它自己引用的NLog 2.0;
- 当调用项目B的功能时,项目B的代码要加载它依赖的NLog 1.0,这时候运行时发现已经加载的NLog版本(2.0)和请求的版本(1.0)对不上,直接报错提示程序集绑定失败,不会自动选其中一个版本来用。
- 如果想统一用某个版本,得在项目A的app.config里加程序集绑定重定向规则,指定所有对NLog的请求都指向同一个版本(比如2.0或者1.0)。
问题2:项目B升级NLog到3.0后,它配置里的绑定重定向要不要加到项目A的app.config?
- 必须加。.NET运行时只会读**启动项目(也就是项目A)**的配置文件,项目B自己的app.config只有当它是启动项目的时候才管用。
- 项目B升级后生成的
<dependentAssembly>和<bindingRedirect>配置,是用来把旧版本的NLog请求重定向到3.0版本的,这些规则必须复制到项目A的app.config里,才能让整个应用程序域都遵循这个重定向逻辑,不然还是会出现版本不兼容的问题。
内容的提问来源于stack exchange,提问作者YMK
相关产品推荐
相关产品推荐

