我正在尝试降级NServiceBus依赖项,而不是使用4.0.0.0来使用2.5.0.0
我正在尝试以下方式,但似乎都没有。
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="NServiceBus"
publicKeyToken="9fc386479f8a226c" culture="neutral"/>
<bindingRedirect oldVersion="4.0.0.0" newVersion="2.5.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
我也试过代码库:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="NServiceBus"
publicKeyToken="9fc386479f8a226c"
culture="neutral"/>
<codeBase version="2.5.0.0" href="NServiceBus.dll"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
仍然,纳达。我浏览了msdn文档,没有提到以向后方式使用此功能。这可能吗?
答案 0 :(得分:4)
我实际上正在使用你的第一个语句用于一些互操作DLL,因为我们公司的客户端在办公室更新方面有不同的状态。这是我使用的代码:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="office" publicKeyToken="71E9BCE111E9429C" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-14.0.0.0" newVersion="11.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
这提供了从版本14到版本11的向后兼容性。你能提供你正在使用的DLL的链接吗?
我已经下载了NServiceBus框架(版本3.3.8)并使用ILSpy调查了DLL。我建议你对你的DLL做同样的事情。对于我的DLL,它向我显示与您相同的公钥令牌。您确定使用版本4.0.0.0而不是版本3.3.0.0。或者你也许错过了公钥标记。
答案 1 :(得分:2)
根据MSDN:https://msdn.microsoft.com/en-us/library/eftw1fys(v=vs.110).aspx
此值可以指定早于oldVersion的版本。
引用newVersion
的{{1}}属性。同样在&#34;备注&#34;部分:
您还可以从较新版本重定向到较旧版本的程序集。
他们的例子是:
bindingRedirect
我确实注意到它也提到了Explicit assembly binding redirection in an application configuration file requires a security permission的某些内容,也许这会对你产生影响吗?
答案 2 :(得分:1)
如果我没有弄错你,我已经使用stimulsoft报告DDL做了同样的事情,我安装了最新版本,但我想在我的应用程序中使用2010.3。但不是通过配置文件和重定向: 我只是从解决方案资源管理器中删除了引用并添加了旧的DLL引用,然后我设置了复制本地属性并重新编译,以便DLL将应用程序放在同一目录中,每个工作正常。也可以和其他一些dll一起完成。
答案 3 :(得分:1)
上面的答案是很好的答案,但它们缺少重要的部分。如果您阅读评论,一些开发人员不再相信这是有效的。实际上,这是有效的,可以双向工作,向上版本或向下工作
重要提示:文化
在我的实验中,只有当我将文化设置为中性时才开始工作。 (上面的例子有&#39; en-us&#39;)
<assemblyIdentity name="..... culture="neutral"/>
在我的设置中,我WinApp
引用了Lib1
和Lib3
。 Lib1
引用Lib2
和Lib3
。 Lib2
引用Lib3
。当我按下按钮时,一个调用从WinApp
一直传播到Lib3
(直接和通过lib链),并在屏幕上显示文本返回。 Lib3
名字很强。
运行1 - 没有文化集[assembly: AssemblyCulture("")]
,没有绑定重定向集 - WORKS!
运行2 - Lib3中的较低版本,将绑定重定向设置为&#39; en-us&#39; - 失败!
运行3 - Lib3中的较低版本,将绑定重定向设置为&#39;中性&#39; - 工作!适用于版本和版本。
在其他游戏中 - 玩设置[assembly: AssemblyCulture("en-us")]
- 当AssemblyCulture
不为空时,所有尝试都失败。实际上,在WinApp
中设置此属性时,它甚至不会编译
错误CS7059:可执行文件不能是附属程序集;文化应该永远是空的
所以,我们走了。由于我不理解AssemblyCulture
所有错综复杂的角色,我只声称我的实验只能证明在特定条件下版本重定向工作正常。