通常避免装配参考问题

时间:2015-05-11 10:30:39

标签: c# .net dll

我搜索了很多,但还是找不到解决方案。

我们为一个目录中的共享库(dll)的客户提供了很多程序。但是如果一个lib获得更新,我们必须重新编译所有引用dll的程序。如果我们不这样做,我们的客户端从lib(The located assembly's manifest definition does not match the assembly reference)调用函数时会出错。

我们想像往常一样引用lib,当lib升级时,程序应该只使用新版本而不是抛出错误。

部分问题是,引用在内部用版本号修复。我的第一个想法是在引用之前删除dll的版本号。但这甚至可能吗?

我会很感激任何(其他)想法或建议如何绕过参考问题。这可能是重复的,但我还没有找到一个解决方案的帖子 - 只是帖子描述了原因。

1 个答案:

答案 0 :(得分:1)

装配绑定重定向怎么样 - https://msdn.microsoft.com/en-us/library/433ysdt1(v=vs.110).aspxone more msdn link)?

您可以在配置重定向中指定新版本,因此不需要重新编译。但是如果您正在使用的类\方法的签名将被更改 - 那么无论如何它都会抛出异常。

ASP.Net MVC使用此方法指定重定向到新版本的MVC:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>