2011-11-17 47 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

相關問題