如何在.net 4.0 Web应用程序中进行程序集重定向

时间:2011-11-17 21:03:23

标签: asp.net .net-4.0 asp.net-4.0 gac

我正在使用asp.net 4.0开发基于Web的应用程序。

我在GAC中使用了一些dll,这些dll在旧版dll上有一些嵌入式依赖项。

我已配置程序集,以便依赖项重定向到我的计算机上正确版本的dll。这在3.5或更低版本的应用程序中完美运行,但是,当我尝试基于相同的dll构建asp.net 4.0应用程序时,它会出现如下错误:

Could not load file or assembly 'ControlReferencedByMyDll, Version=2.0.0.0, 
Culture=neutral, PublicKeyToken=XXXXXXXXXXXXXXXX' or one of its dependencies.
The located assembly's manifest definition does not match the assembly reference. 
(Exception from HRESULT: 0x80131040) 

我的ControlReferencedByMyDll版本是2.0.1.0版本。

我找不到.net 4.0的GAC配置实用程序,但是在我的machine.config中(在.net 4.0的Framework和Framework64文件夹中)我添加了类似的内容:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="ControlReferencedByMyDll" PublicKeyToken="XXXXXXXXXXXXXXXX"/>
      <bindingRedirect oldVersion="1.0.0.0-9.9.9.9" newVersion="2.0.1.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

看看那是不是问题。

我甚至尝试将applyTo =“v2.0.50727”属性添加到assemblyBinding以查看它是否有所不同。

但它似乎没有。

还有其他人有这个问题吗?更重要的是,任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:5)

我不知道这么长时间后是否有帮助,但我遇到了以下问题。

我有一个重定向:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="test.dll" PublicKeyToken="XXXXXXXXXXXXXXXX"/>
      <bindingRedirect oldVersion="1.0.0.0-9.9.9.9" newVersion="2.0.1.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

而且,虽然它在之前的版本中有效,但它也无法在4.0上运行。

我从名称中删除了“.dll”,现在它可以运行!!!

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="test" PublicKeyToken="XXXXXXXXXXXXXXXX"/>
      <bindingRedirect oldVersion="1.0.0.0-9.9.9.9" newVersion="2.0.1.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

希望它可以帮助下一个可怜人头几个小时的穷人。

答案 1 :(得分:0)

好的,我还没有看到任何额外的反馈,此时,我还没有确定.config文件是否在/ machine.config和web.config之间被覆盖,但这是有效的。

我添加类似以下的代码:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="ControlReferencedByMyDll" PublicKeyToken="XXXXXXXXXXXXXXXX"/>
      <bindingRedirect oldVersion="1.0.0.0-9.9.9.9" newVersion="2.0.1.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

直接到我的web.config文件。

我提交这个作为我自己问题的答案,但如前所述,如果您碰巧知道更好的方法,或者知道导致machine.config和web.config之间脱节的原因,请分享。

谢谢