如何让2个同名的.Net Dll一起工作?

时间:2010-12-10 19:12:38

标签: .net visual-studio dll

我的应用程序中有一个DLL,它本身可以正常工作。但是,供应商发布了我试图使用Visual Studio合并的更新版本的DLL。这些DLL使用不同的名称空间共享相同的文件名,而后者则不向后兼容。

为了让VS甚至使用更新的,我重命名了有意义的文件。但是,每次构建应用程序时,它只想将较新的dll复制到应用程序文件夹,并基本上忽略旧的dll。我试过“复制本地”和其他设置没有运气。我可以将dll添加到GAC并完成它,但不是真的想要。

如何让VS将两者视为完全独立的物品?

3 个答案:

答案 0 :(得分:4)

  

我的应用程序中有一个DLL,它本身可以正常工作。但是,供应商发布了我试图使用Visual Studio

合并的更新版本的dll

为什么不完全删除旧的DLL并更改代码以使新的DLL工作?你为什么要同时使用两者?

答案 1 :(得分:2)

您可以将这两个DLL部署到不同的子目录。然后,您需要在app.config中设置规则,告诉.NET在哪里找到每个版本。

基于MSDN page for the <codeBase> element的示例:

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="myAssembly"
                              publicKeyToken="32ab4ba45e0a69a1"
                              culture="neutral" />
            <codeBase version="1.0.0.0"
                      href="Version1/myAssembly.dll"/>
            <codeBase version="2.0.0.0"
                      href="Version2/myAssembly.dll"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

在构建时,您需要设置Copy Local = false,以防止Visual Studio混淆。您还需要一个构建版本1和版本2子目录的构建后步骤。

请注意,这假设您可以根据版本号分辨DLL。

答案 2 :(得分:0)

我实际上通过简单的后期构建步骤将dll复制到应用程序文件夹来解决问题。 VS对待每个不同的,但在构建时只复制了以后。