我正在尝试降级 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 文档,没有提到以“向后”的方式使用此功能。这可能吗?
<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>
这提供了从 DLL 版本 14 到版本 11 的向后兼容性。您能提供您正在使用的 DLL 的链接吗?
我已经下载了 NServiceBus 框架(版本 3.3.8)并使用 ILSpy 检查了 DLL。我建议你对你的 DLL 做同样的事情。对于我的 DLL,它显示了与您相同的公钥令牌。您确定使用版本 4.0.0.0 而不是版本 3.3.0.0。或者您可能与公钥令牌不匹配。
指的是
newVersion
的
bindingRedirect
属性。同样在“备注”部分:您还可以从程序集的较新版本重定向到旧版本。
他们的例子是:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="myAssembly"
publicKeyToken="32ab4ba45e0a69a1"
culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0"
newVersion="2.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
我确实注意到它还提到了一些有关应用程序配置文件中的显式程序集绑定重定向需要安全权限
重要:
文化在我的实验中,只有当我将文化设置为中性时它才开始起作用。 (上面的例子有“en-us”)
<assemblyIdentity name="..... culture="neutral"/>
在我的设置中,我有
WinApp
引用了
Lib1
和 Lib3
。 Lib1
参考Lib2
和Lib3
。 Lib2
参考文献Lib3
。当我按下按钮时,一个调用从 WinApp
一路传播到 Lib3
(直接传播和通过库链传播),并且文本返回显示在屏幕上。 Lib3
的名字很强大。 运行 1 - 未设置区域性
[assembly: AssemblyCulture("")]
,未设置绑定重定向 - 有效!
运行 2 - Lib3 中的较低版本,将绑定重定向设置为“en-us” - 失败!
运行 3 - Lib3 中的较低版本,将绑定重定向设置为“中性” - 有效!适用于向上版本和向下版本。
在其他运行中 - 使用设置
[assembly: AssemblyCulture("en-us")]
- 当
AssemblyCulture
不为空时,所有尝试都会失败。事实上,当在WinApp
中设置这个属性时,它甚至无法编译错误CS7059:可执行文件不能是附属程序集;文化应该永远是空的
所以,我们开始吧。由于我不明白
AssemblyCulture
的所有复杂作用,我只声称我的实验仅证明在特定条件下版本重定向工作正常。