Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET编译的第三方DLL引用冲突_C#_.net_Vb.net_Dll_Gac - Fatal编程技术网

C# .NET编译的第三方DLL引用冲突

C# .NET编译的第三方DLL引用冲突,c#,.net,vb.net,dll,gac,C#,.net,Vb.net,Dll,Gac,我正在使用(一个.NET CMS),它引用了一个特定版本的DLL(请参见下面的1 Umbraco引用)。这很好,直到我尝试挂接到.NET MailChimp API,该API引用同一DLL的不同版本(请参见下面的2 PerceptiveMCAPI) 我可以想出几个解决这个问题的办法 a。获取Umbraco或PerceptiveMCAPI源代码并引用同一版本的DLL,出于兼容性原因,确实不希望这样做 b。在GAC中转储2个DLL,我希望避免这种情况,因为如果有人忘记了,就会出现部署问题(我知道我们

我正在使用(一个.NET CMS),它引用了一个特定版本的DLL(请参见下面的1 Umbraco引用)。这很好,直到我尝试挂接到.NET MailChimp API,该API引用同一DLL的不同版本(请参见下面的2 PerceptiveMCAPI)

我可以想出几个解决这个问题的办法

a。获取Umbraco或PerceptiveMCAPI源代码并引用同一版本的DLL,出于兼容性原因,确实不希望这样做

b。在GAC中转储2个DLL,我希望避免这种情况,因为如果有人忘记了,就会出现部署问题(我知道我们应该进行自动部署,但时间有限)

我记得还有第三个选项可以指定在配置中使用哪个版本的DLL。这可能吗?代码是什么

1翁布拉科参考资料

// Assembly Reference CookComputing.XmlRpcV2

Version: 2.4.0.0 
Name: CookComputing.XmlRpcV2, Version=2.4.0.0, Culture=neutral, PublicKeyToken=a7d6e17aa302004d 
2感知MCAPI

// Assembly PerceptiveMCAPI, Version 1.2.4.3


Location: C:\Work\AEGPL\AEGPL_Website\bin\PerceptiveMCAPI.dll 
Name: PerceptiveMCAPI, Version=1.2.4.3, Culture=neutral, PublicKeyToken=null 
Type: Library 

这正是GAC存在的原因。我能想到的唯一其他解决方法是将这些DLL填充到子目录中,以便CLR无法找到它们并实现AppDomain.AssemblyResolve。现在,您可以为每个新版本更新维护该代码

请注意,第三个选项仅在两个版本之间没有中断更改的情况下有效,即,如果Umbraco和PerceptiveMCAPI都使用相同的版本而没有问题。我不完全确定它是否有效,但第四个选项可能是使用ILMerge并将每个库与它所需的版本合并,就像我提到的,GAC在部署时可能会有问题。我们通常使用XCopy文件夹进行部署,如果bin中不存在DLL,它很容易被忘记。我正在研究的解决方案最终希望它能在共享托管环境中工作,而GAC在这种情况下是不允许的。