2011-11-17 91 views
2

我正在使用asp.net 4.0开发基于Web的应用程序。如何使程序集重定向在.net 4.0 web应用程序中工作

我在GAC中使用了一些dll,它们在老的dll上有一些嵌入的依赖关系。

我已配置程序集,以便依赖项重定向到我的机器上的dll的正确版本。

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的版本是:然而,这完全在3.5或更低版本的应用程序,当我尝试基于相同的dll建立一个asp.net 4.0应用程序,它像一个错误扼流圈版本2.0.1.0。

我无法找到.NET 4.0 GAC配置实用程序,但在我的machine.config(在框架和.NET 4.0 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以查看它是否有所作为。

但它似乎没有。

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

+0

好的,我发现了一些似乎可行的东西,尽管如果存在的话我仍然对看到更好的答案感兴趣,也许有人可以启发我为什么这会起作用。 我只是把上面指出的代码直接放到我的web.config中,一切都很好。 – CStroliaDavis

+0

相关:http://stackoverflow.com/questions/16678395/assemblybinding-bindingredirect-not-working-for-mvc4-app-with-t4mvcextensions – user423430

回答

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之间的断开,请分享。

谢谢

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> 

希望它有助于下一个可怜的家伙几个小时裂开他的头。

+0

谢谢!我必须从assemblyBinding中删除'appliesTo'属性,因为它引用了.NET 2 – user423430

+0

谢谢,我刚刚有了相反的做法,不得不为名称添加“dll”。 – hogarth45

相关问题