c# – 如何在不重新编译的情况下处理第三方.Net程序集的新版本?

我有一些项目依赖于外部.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,但这不会影响问题.

解决这个问题的正确方法是什么?

最佳答案 只要方法签名不变,您就可以“即插即用”.

如果这些更改,那么您将需要修复基本代码.

查看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

点赞