【问题标题】:How to handle new releases of third-party .Net assemblies without recompiling?如何在不重新编译的情况下处理第三方 .Net 程序集的新版本?
【发布时间】:2017-04-28 21:24:47
【问题描述】:

我有一些依赖外部 .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,但这并没有影响问题。

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

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    只要方法签名不变,您就可以“即插即用”。

    如果这些变化,那么您将需要修复您的基本代码。

    查看 Microsoft 关于 Redirecting Assembly Versions 的文档: 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

    【讨论】:

    • 这个不需要编辑应用的配置文件的配置吗?因此,当标签应用程序更新并且版本更改时,我的应用程序无法使用,直到将新程序的版本号输入到绑定语句中,还是我错过了忽略版本选项?
    • 我们不控制第三方库或它们正在运行的机器。我们有使用它们的应用程序。据我所见,我们使用的物品的所有签名都保持不变。可能会添加新的接口,但以前的接口是一成不变的。
    • 那么它只是归结为可能需要修改配置文件。
    • bindingRedirect 最终对我有用。新版本引用了我使用的第三方的汇编版本。重定向进入主应用程序 App.Config 而不是使用程序集的项目。我认为原因是主应用程序加载了我的项目,并且作为依赖项的一部分加载了第三方程序集。子项目不会自己加载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多