为什么程序集绑定重定向在我的网站中不起作用?

时间:2009-10-09 11:00:13

标签: .net asp.net assemblies

我有一个网站项目,我使用内置的开发Web服务器从Visual Studio运行。网站的虚拟路径设置为/

web.config包含带

的运行时元素
<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="CMS.Controls" publicKeyToken="834b12a258f213f9" culture="neutral" />
      <bindingRedirect oldVersion="4.1.3518.21577" newVersion="4.1.3561.21846" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

我已从根xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"元素中删除了configuration属性。

这是错误:

  

无法加载文件或程序集   'CMS.Controls,Version = 4.1.3518.21577,   文化=中性,   PublicKeyToken = 834b12a258f213f9'或   其中一个依赖项。位于   程序集的清单定义   与程序集引用不匹配。   (HRESULT异常:0x80131040)

这是绑定的日志:

The operation failed.
Bind result: hr = 0x80131040. No description available.
...
LOG: DisplayName = CMS.Controls, Version=4.1.3518.21577, Culture=neutral, PublicKeyToken=834b12a258f213f9
 (Fully-specified)
...
LOG: This bind starts in default load context.
LOG: Using application configuration file: D:\Project\WebSite\web.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: CMS.Controls, Version=4.1.3518.21577, Culture=neutral, PublicKeyToken=834b12a258f213f9
...
LOG: Assembly Name is: CMS.Controls, Version=4.1.3561.21846, Culture=neutral, PublicKeyToken=834b12a258f213f9
WRN: Comparing the assembly name resulted in the mismatch: Revision Number

对我而言似乎忽略了我的重定向。我一直在看它一个小时,我有拼写错误吗?

4 个答案:

答案 0 :(得分:1)

我知道它已经有一段时间了,但也许这可以帮助某个人......

我们在某个项目上遇到了完全相同的问题, 它是一个Web应用程序,而不是一个网站,但由于问题涉及引用程序集 我不认为项目类型的差异是相关的(我可能是错的)

假设我们有以下程序集:

  • WebApplicationAssembly

    1. CMSControlAssembly
    2. UserManagementAssembly

WebApplicationAssembly正在引用CMSControlAssembly和UserManagementAssembly。

因此,我们尝试在CMSControlAssembly上进行装配,并取得了与您一样多的成功。

经过一番挖掘后,灯光亮了起来:

问题是我们在webapplication中直接使用了CMSControlAssembly中的webcontrol。 (装配结合就是这样设置的)

但是UserConagementAssembly也引用了CMSControlAssembly,这就是我们问题的原因。

UserManagementAssembly是使用较低版本的CMSControlAssembly编译的,而不是Web应用程序使用的版本。

Web应用程序无法找到这个较低版本的程序集,因为提供的唯一版本是程序集绑定的目标版本。

实际上,错误并未显示非功能性装配,但UserManagementAssembly缺少装配。

答案 1 :(得分:0)

这是64位/ 32位dll问题,有时不同系统的dll版本不同。即使您运行的是64位版本的Windows,开发Web服务器也可以作为32位应用程序运行。

如果切换到CassinDev Server,您可以切换到64位开发服务器。它的工作原理相同。

答案 2 :(得分:0)

可以解释这样的错误的唯一原因是新版本未部署在GAC上(在Windows程序集文件夹中)。

  

重要说明:如果版本之间的公钥不匹配,则未部署也适用例如版本1公钥为 abcd 但新版本使用 efgh < / em>的。确保公开匹配并且该版本在GAC上。

答案 3 :(得分:-1)

我最近遇到了类似的问题,使用了两个版本,所以我确实清理了解决方案,并且有时再次重建它。此外,如果干净没有清除bin文件夹中的文件,我手动删除文件并重新生成。 根据我们需要清除文件的框架版本,对于.net 4这里是查找旧版本后退的临时文件的文件夹 C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files