流行的开源库和引用冲突

Tru*_*ill 9 c# dll gac reference

我们在所有(许多)内部应用程序中使用log4net.我们通常会执行相当于xcopy部署的操作.为方便开发人员,我们将log4net源编译为一个核心库.

现在又回来咬我们了.其他开源库(如Topshelf)引用log4net.还有一些(例如NServiceBus)将log4net合并到它们的程序集中.通常版本不同.

这是一个普遍的问题; 特定的库只是例子.

有几个类似的问题:

在各种解决方案(GAC,assemblyBinding,bindingRedirect等)中,未来可能会给我们带来最小的痛苦?我们可以修改我们的核心库; 我们无法做任何会破坏现场部署版本的事情.更新我们所有的项目参考将是痛苦的,所以我们只想这样做一次.

更新: Topshelf的当前版本抽象了日志记录,因此这不再是该框架的问题.

Ste*_*uhr 1

对于您的情况,我将使用发布者程序集策略在 GAC 中部署我的 DLL

\n\n

发布者策略程序集是配置 .NET 运行时绑定到程序集时要使用的策略的程序集。因此,您可以通过在发布者策略中指定必须使用哪个版本的 DLL 来轻松更新所有项目。

\n\n

发布商集会政策示例:

\n\n
<configuration> \n<runtime>\n <assemblyBinding xmlns=\xe2\x80\x9durn:schemas-microsoft-com:asm.v1\xe2\x80\xb3>\n  <dependentAssembly> \n   <assemblyIdentity name=\xe2\x80\x9dwebsite\xe2\x80\x9d publicKeyToken=\xe2\x80\x9d18517ea673f8584b\xe2\x80\x9d culture=\xe2\x80\x9dneutral\xe2\x80\x9d />\n   <bindingRedirect oldVersion=\xe2\x80\x9d1.0.0.0\xe2\x80\xb3 newVersion=\xe2\x80\x9d2.0.0.0\xe2\x80\xb3/> </dependentAssembly> \n</assemblyBinding> \n</runtime> \n</configuration>\n
Run Code Online (Sandbox Code Playgroud)\n