16

I am trying to downgrade a NServiceBus dependency so instead of using 4.0.0.0 to use 2.5.0.0

I am trying with the following ways, none of which seem to work.

<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>

I also tried with codebase :

<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>

Still, nada. I went through the msdn documentation and there is no mention of using this capability in a backwards way. Is this possible?

4

4 回答 4

6

实际上,我将您的第一个语句用于某些互操作 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>

这提供了从 DLL 版本 14 到版本 11 的向后兼容性。您能否提供指向您正在使用的 DLL 的链接?

我已经下载了 NServiceBus 框架(版本 3.3.8)并使用 ILSpy 调查了 DLL。我建议你对你的 DLL 做同样的事情。对于我的 DLL,它向我显示了与您的相同的公钥令牌。您确定您使用的是 4.0.0.0 版而不是 3.3.0.0 版。或者您可能与公钥令牌不匹配。

于 2013-06-14T12:17:49.170 回答
2

根据 MSDN: https ://msdn.microsoft.com/en-us/library/eftw1fys(v=vs.110).aspx

此值可以指定比 oldVersion 更早的版本。

指的是 的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>

我确实注意到它还提到了一些关于应用程序配置文件中的显式程序集绑定重定向需要安全权限的内容,也许这也影响了你?

于 2015-07-22T20:36:50.850 回答
2

上面的答案是很好的答案,但它们缺少重要的部分。如果您阅读评论,一些开发人员不再相信这是有效的。事实上,这是双向的,向上或向下

重要:文化

在我的实验中,它只有在我将文化设置为中性时才开始起作用。(上面的例子有'en-us')

<assemblyIdentity name="..... culture="neutral"/>

在我的设置中,我有WinApp那些引用Lib1Lib3. Lib1参考文献Lib2Lib3. Lib2参考资料Lib3。当我按下按钮时,一个调用从WinAppLib3(直接和通过库链)一直传播,并且文本返回显示在屏幕上。Lib3是强命名。

运行 1 - 没有文化集[assembly: AssemblyCulture("")],没有绑定重定向集 - 有效!

运行 2 - Lib3 中的较低版本,将绑定重定向设置为“en-us” - 失败!

运行 3 - Lib3 中的较低版本,将绑定重定向设置为“中性” - 工作!适用于上版本和下版本。

在其他运行中 - 使用设置- 当不为空时,[assembly: AssemblyCulture("en-us")]所有尝试都失败了。AssemblyCulture事实上,当在 中设置这个属性时WinApp,它甚至不会编译

错误 CS7059:可执行文件不能是附属程序集;文化应该永远是空的

所以,我们开始吧。由于我不了解角色的所有复杂性,AssemblyCulture我只声称我的实验仅证明在特定条件下版本重定向工作正常。

于 2018-06-08T22:18:10.190 回答
1

如果我没有误会,我对 stimulsoft 报告 DDL 做了同样的事情,我安装了最新版本,但我希望在我的应用程序中使用 2010.3。但不是通过配置文件和重定向:我只是从解决方案资源管理器中删除了引用并添加了旧的 DLL 引用,然后我设置了复制 Local 属性并重新编译,以便 DLL 将与应用程序放在同一目录中,一切正常美好的。也用其他一些 dll 完成了它。

于 2013-08-08T08:08:45.033 回答