Addin与同一库的不同版本冲突

时间:2019-01-14 21:43:10

标签: c# .net fody-costura

我主要创建作为其他父软件的插件的程序;其他人和公司也为父软件制作插件。当两家公司使用同一第三方库的不同版本时,由于父软件是加载它们的软件,因此它们被加载到同一AppDomain中,这将成为一个问题。

让我们使用Newtonssoft.Json.dll,因为它很常见。如果我使用12.0.1,而其他公司使用11.0.2,则存在冲突。如果首先加载了他们的插件,那么我将获得11.0.2版本,因为它已经加载,这可能导致我的应用崩溃。如果首先加载地雷,反之亦然;反之亦然。他们的将获得12.0.1并可能崩溃。两者都可以正常工作,但是如果一个或两个都安装,则会造成致命错误。

有没有办法封装它们,使它们独立加载?我最近发现了Costura.Fody,并认为可能就是答案。但是,即使从嵌入式而不是从磁盘加载,它仍会以相同的名称加载程序集。我还注意到,在内部它会将名称更改为“ Costura.Newtonsoft.Json”,但是当我在调试中尝试使用它时,它仍然被加载为“ Newtonsoft.Json”。我想知道是否有任何方法可以更改.NET加载依赖项的名称或身份,以便它认为它与众不同,并且可以与同一应用程序域中的其他插件隔离。例如将其加载为ABC.Newtonsoft.Json.dll,然后另一家公司可以加载为DEF.Newtonsoft.Json.dll之类的东西。

无论如何,正在寻找一种永久解决此问题的好方法...非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我们在系统中使用的2个主要库引用了BouncyCastle的相同问题。 其中一个图书馆是itextsharp, 解决方法是,在导入lib的位置添加extern alias。在添加“ extern”之前,我们将如上图所示设置Aliases属性。

enter image description here

然后我们如下引用BouncyCastle using itextsharp.Org.BouncyCastle.Security;

希望这会有所帮助