另一个引用旧dll的程序集

时间:2013-03-28 10:35:47

标签: c# assemblies .net-assembly

我有2个程序集可以调用它们A和B.我已经为它们分配了强名称,现在问题出现了程序集B正在寻找旧版本的程序集A. **编辑2:如果我删除AssemblyB问题仍然存在,那么它可能只是VS2008寻找旧版本?另外通过fusionlog我看到以下警告:wrn应用程序配置文件绑定重定向不允许。这与它有什么关系吗? **

我收到多个同类错误,这是一个片段:

You must add a reference to assembly 'AssemblyA, Version=1.2.4737.25316, Culture=neutral, PublicKeyToken=null'.

项目中强大的名为AssemblyA显示了这些属性: enter image description here

在app.config里面我放了这段代码:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="AssemblyA" culture="neutral"
    publicKeyToken="a22e30ac6a0edfc0"/>
            <bindingRedirect oldVersion="1.2.4737.25316" newVersion="1.3.0.19440"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>

但这不起作用。我可以访问两个程序集的源代码。

编辑:如果我删除强名称并将旧的(弱名称)dll添加到项目中,则会询问有关强名称版本的错误

You must add a reference to assembly 'AssemblyA, Version=1.3.0.19440, Culture=neutral, PublicKeyToken=a22e30ac6a0edfc0'.

这里发生了什么?

1 个答案:

答案 0 :(得分:2)

某些DLL仍然引用其他DLL的旧(弱命名)版本。幸运的是程序集来自源代码所以我不得不重新编译包括密钥在内的所有内容。

之后出现了另一个错误:“找到的程序集的清单定义与程序集引用不匹配”

要解决此问题,我在app.config中添加了以下内容。

<?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <publisherPolicy apply="no" />
            <assemblyIdentity name="Assemblyname" culture="neutral" publicKeyToken="3a5628535d42dbed"/>
            <bindingRedirect oldVersion="1.3.0.15233" newVersion="1.3.0.40647" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>