我的应用程序中有一个DLL,它本身可以正常工作。但是,供应商发布了我试图使用Visual Studio合并的更新版本的DLL。这些DLL使用不同的名称空间共享相同的文件名,而后者则不向后兼容。
为了让VS甚至使用更新的,我重命名了有意义的文件。但是,每次构建应用程序时,它只想将较新的dll复制到应用程序文件夹,并基本上忽略旧的dll。我试过“复制本地”和其他设置没有运气。我可以将dll添加到GAC并完成它,但不是真的想要。
如何让VS将两者视为完全独立的物品?
答案 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对待每个不同的,但在构建时只复制了以后。