在app.config <assemblybinding> / <codebase> </codebase> </assemblybinding>中配置任何较新程序集版本的.NET程序集绑定

时间:2014-12-18 10:56:47

标签: c# .net app-config .net-assembly assembly-binding-redirect

在C#项目中,我使用外部程序集并将其添加到项目的References中。让我们说集会被称为&#34; ABC &#34; ,位于编译时 c:\ complie-time \ abc.dll 版本 1.0.0.0 。 &#34;复制本地&#34;设置为false。

因为它没有在本地复制,所以必须在app.config中指定程序集位置。

<runtime>
 <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="ABC"  culture="neutral" publicKeyToken="xyz"/>
    <codeBase version="????" href="FILE://c:/ABC-install/abc.dll"/>
  </dependentAssembly>
 </assemblyBinding>
</runtime>

ABC程序集由ABC应用程序安装提供。所以在运行时,dll位于不同的位置 c:\ ABC-install \ abc.dll

问题是:我应该在codeBase版本中添加什么内容?

如果用户安装较新版本的ABC表示 1.1.0.0 ,并且已知它是向后兼容的,则上述操作无效,因为.NET框架正在寻找版本 1.0.0.0 c:\ ABC-install \ abc.dll 如果我把1.0.0.0放在那里。

条件是在编译时我们不知道c:\ ABC-install中的版本号是什么。我们所知道的是它是向后兼容的。该项目应该能够与所有版本的ABC程序集一起运行。

如何配置app.config以允许绑定较新版本的外部程序集,但在编译时运行时版本未知,而在编译时,项目是基于引用中的1.0.0.0 dll构建的设置?

编辑:codeBase版本到????清楚地表明这个问题。

1 个答案:

答案 0 :(得分:0)

取自标准的样本片段(我相信visual studio生成的web.config),使用bindingRedirect部分。

    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
        </dependentAssembly>