我搜索了很多,但还是找不到解决方案。
我们为一个目录中的共享库(dll)的客户提供了很多程序。但是如果一个lib获得更新,我们必须重新编译所有引用dll的程序。如果我们不这样做,我们的客户端从lib(The located assembly's manifest definition does not match the assembly reference)调用函数时会出错。
我们想像往常一样引用lib,当lib升级时,程序应该只使用新版本而不是抛出错误。
部分问题是,引用在内部用版本号修复。我的第一个想法是在引用之前删除dll的版本号。但这甚至可能吗?
我会很感激任何(其他)想法或建议如何绕过参考问题。这可能是重复的,但我还没有找到一个解决方案的帖子 - 只是帖子描述了原因。
答案 0 :(得分:1)
装配绑定重定向怎么样 - https://msdn.microsoft.com/en-us/library/433ysdt1(v=vs.110).aspx(one 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>