我有一些项目依赖外部.Net程序集来运行。这些是从我的程序外部安装的,因此我无法直接控制正在使用的版本。此外,预计会安装更新。
例如,在一种情况下,我正在访问提供.Net接口来控制它的硬件设备。当用户最初安装设备时,他们会安装包含的驱动程序。我编写程序时的驱动程序可能是3.0.4.0。最新版本可能是3.1.8.0。
当发生这种情况时,我的程序无法加载程序集,抱怨清单定义不正确。下面显示了一条特定的异常消息。
另一个例子是标签计划。它们提供.Net接口,允许我的程序通过他们的系统打印标签。安装该程序的更新版本是致命的。
以下是具体的异常消息:
Could not load file or assembly 'SDK.NET.Interface, Version=17.1.0.0,
Culture=neutral, PublicKeyToken=865eaf3445b2ea56' or one of its
dependencies. The located assembly's manifest definition does not match
the assembly reference.
如果我在我的计算机上安装此版本的应用程序,然后引用程序集的更新版本并编译,我很高兴。 。 。现在。
但是,我再次遇到这个问题只是时间问题。
我已尝试将引用的程序集的Specific Version
属性设置为False
,但这不会影响问题。
解决问题的正确方法是什么?
答案 0 :(得分:1)
只要方法签名不变,您就可以“即插即用”。
如果这些更改,那么您需要修复基本代码。
查看Microsoft关于重定向程序集版本的文档: http://msdn.microsoft.com/en-us/library/7wd6ex19%28VS.71%29.aspx
另一种选择是如果这些库以某种方式由您或您的公司控制,您可能会有一些带有反射的摆动空间,通过它们的基本类型/接口加载它们并使用常用方法......但您需要有访问基本类型。
这也是一个重复的问题:
Upgrade a reference dll in a C# project without recompiling the project
Upgrading dependent DLL without recompiling the whole application