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

kpbwa7wx  于 2022-12-20  发布在  .NET
关注(0)|答案(5)|浏览(200)

我有一个网站项目,我使用内置的开发Web服务器从Visual Studio运行该项目。网站的虚拟路径设置为/
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>

我已经从根configuration元素中删除了xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"属性。
下面是错误:
未能加载文件或程序集"CMS. Controls,版本= 4.1.3518.21577,区域性= neutral,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

在我看来,它好像忽略了我的重定向。我已经看了一个小时了,我有一个错字或什么?

eivnm1vs

eivnm1vs1#

这是64位/32位dll的问题吗?有时候不同的系统会有不同的dll版本。即使你运行的是64位版本的Windows,开发web服务器也会作为32位应用程序运行。
如果你切换到CassinDev服务器,你可以切换到64位开发服务器。它的工作原理是一样的。

4smxwvx5

4smxwvx52#

能够解释此类错误的唯一原因是新版本没有部署在GAC(在windows assembly文件夹中)上。

**重要信息:**如果版本之间的公钥不匹配,例如版本1的公钥为 abcd,但新版本使用 efgh,则“未部署”也适用。请确保公钥匹配,并且版本在GAC上。

zzwlnbp8

zzwlnbp83#

删除根配置元素中的xmlns=”schemas.microsoft.com/.NetConfiguration/v2.0“属性,请帮我修复它-谢谢

4ioopgfo

4ioopgfo4#

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

4ioopgfo

4ioopgfo5#

我知道已经有一段时间了,但也许这能帮到别人......
我们在一些项目上遇到了完全相同的问题,这是一个Web应用程序,而不是一个网站,但由于问题涉及引用的程序集,我不认为项目类型的差异是相关的(我可能是错误的)
假设我们有以下程序集:

  1. Web应用程序程序集
  2. CMS控制组件
    1.用户管理程序集
    Web应用程序程序集正在引用CMS控制程序集和用户管理程序集。
    所以我们尝试在CMSControlAssembly上做一个汇编绑定,和你做的一样成功。
    经过一番挖掘,灯光亮了起来:
    问题是我们直接在我们的Web应用程序中使用CMSControlAssembly中的Web控件。2(assemblybinding就是这样设置的)
    但是CMSControlAssembly也被UserManagementAssembly引用,这就是问题的原因。
    UserManagementAssembly是使用比Web应用程序使用的CMSControlAssembly版本低的CMSControlAssembly版本编译的。
    Web应用程序找不到这个较低版本的程序集,因为提供的唯一版本是assemblybinding的目标版本。
    因此,实际上错误不是显示非功能性程序集绑定,而是UserManagementAssembly缺少程序集。

相关问题