Bin为Web应用程序部署了DLL优先于GAC的DLL?

时间:2012-03-06 23:29:58

标签: asp.net asp.net-mvc-3 web-config gac assembly-resolution

我遇到的问题是使用较旧的GAC程序集而不是bin中较新的版本程序集。

服务器:

Assembly version: ASP.NET MVC 3 RC 1 (3.0.11029.0)
Full name: System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Code base: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Web.Mvc/v4.0_3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll
Deployment: GAC-deployed 

开发机器:

Assembly version: Unknown version (3.0.20105.0)
Full name: System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Code base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Web.Mvc/v4.0_3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll
Deployment: GAC-deployed 

较新的RTM版本(3.0.20105.0)位于应用程序的bin目录中。但是,应用程序正在使用GAC中的那个而不是本地bin。我从Windows应用程序的经验是本地bin部署的DLL始终优先,因为只有在与应用程序相同的目录中找不到DLL时才会检查GAC。这种约定似乎不适用于Web应用程序。

如何强制它使用我的新版本bin部署的DLL(3.0.20105.0)?

编辑: 我确实尝试过像这样的绑定重定向:

<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="3.0.11029.0" newVersion="3.0.20105.0" />

我尝试了旧版本的几种变体,例如0.0.0.0-4.0.0.0。在我的所有尝试中,通常它会加载旧版本,或者给我这个异常消息:

Could not load file or assembly 'System.Web.Mvc' or one of its dependencies. 
The located assembly's manifest definition does not match the assembly reference. 

绑定日志没有任何错误,除了这是最后两行:

WRN: Comparing the assembly name resulted in the mismatch: Build Number
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

2 个答案:

答案 0 :(得分:1)

已回答是Dll in both the bin and the gac, which one gets used?注意,您必须运行strong name hijack,否则它将使用GAC版本。 我会重申这一点,它不是MVC特有的。

答案 1 :(得分:0)

您可以修改.config文件以使用assembly binding redirection,并强制运行时根据需要加载不同的版本。