.Net dll引用- 部署到具有不同版本第三方dll的计算机上
.Net dll引用- 部署到具有不同版本第三方dll的计算机上
你能告诉我这种情况下最好的方法吗?我接手了一个新项目,之前没有遇到过这种情况。
我们的C# Windows Forms应用程序中有一个对第三方工具生成文档的引用。
在部署环境中,人们的PC上安装了两个不同版本的第三方工具 - v1.0和v2.0。
我只能构建我们的Windows Forms应用程序与第三方工具的v1.0或v2.0版本配合使用。为此,在构建之前,我必须在我的开发PC上安装其中一个版本。显然,这是一个不好的方法,因为我每次都必须卸载/重新安装第三方工具。如果我在我的PC上使用错误的版本进行构建,用户将收到以下错误消息:
无法加载文件或程序集 'Interop.IManage, Version=1.0.0.0, Culture=neutral, PublicKeyToken=141424aa94e741g5' 或其某个依赖项。所定位的程序集清单定义与程序集引用不匹配。
项目中似乎只有一个对dll的引用,该引用使用了GAC引用。
C:\WINDOWS\assembly\GAC\Interop.iManage\1.0.0.0__141424aa94e741g\third.partyTool.dll
如果我卸载v1.0并安装v2.0,它将更改为以下内容:
C:\WINDOWS\assembly\GAC\Interop.iManage\2.0.0.0__141424aa94e741g\third.partyTool.dll
至于我们应用程序的部署,我们只是简单地复制文件,没有安装程序。
有办法在我们的应用程序中保留两个引用,然后在部署后使用正确的引用吗?或者有没有部署方法可以解决这个问题?
谢谢
问题:在部署到具有不同版本的第三方dll的PC上,出现了.Net dll reference的问题。
原因:在构建时,使用了1.0.0版本的第三方程序集,但在某些PC上,可能只有2.0.0版本的程序集可用。这导致了版本不匹配的问题。
解决方法:可以使用绑定重定向来解决此问题。通过在应用程序配置文件中进行绑定重定向,将使用2.0.0版本的程序集(如果可用)。具体方法可以参考以下链接:http://msdn.microsoft.com/en-us/library/eftw1fys(v=vs.100).aspx。
以下链接中还提供了更多示例:http://blogs.msdn.com/b/thottams/archive/2007/01/30/introduction-to-versioning-and-bindingredirect.aspx?Redirected=true。
此外,Stack Overflow上的一个帖子也描述了在设置绑定重定向时常见的问题:Assembly binding redirect does not work。