我主要创建附加到不同父软件的程序;其他人和公司也为父软件制作插件。当两家公司使用同一个第三方库的不同版本时,这会成为一个问题,它们被加载到同一个 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 或其他东西。
无论如何,寻找一些永久处理这个问题的好方法......非常感谢任何帮助。