我有一个网站项目,我使用内置的开发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
在我看来,它好像忽略了我的重定向。我已经看了一个小时了,我有一个错字或什么?
5条答案
按热度按时间eivnm1vs1#
这是64位/32位dll的问题吗?有时候不同的系统会有不同的dll版本。即使你运行的是64位版本的Windows,开发web服务器也会作为32位应用程序运行。
如果你切换到CassinDev服务器,你可以切换到64位开发服务器。它的工作原理是一样的。
4smxwvx52#
能够解释此类错误的唯一原因是新版本没有部署在
GAC
(在windows assembly文件夹中)上。**重要信息:**如果版本之间的公钥不匹配,例如版本1的公钥为 abcd,但新版本使用 efgh,则“未部署”也适用。请确保公钥匹配,并且版本在GAC上。
zzwlnbp83#
删除根配置元素中的xmlns=”schemas.microsoft.com/.NetConfiguration/v2.0“属性,请帮我修复它-谢谢
4ioopgfo4#
我最近在使用两个版本时遇到了类似的问题,所以我清理了解决方案并再次重建,有时会成功。此外,如果清理没有清除bin文件夹中的文件,我会手动删除文件并再次构建。根据框架版本,我们需要清除文件,对于.net 4,这里是查找旧版本正在退出的临时文件的文件夹C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
4ioopgfo5#
我知道已经有一段时间了,但也许这能帮到别人......
我们在一些项目上遇到了完全相同的问题,这是一个Web应用程序,而不是一个网站,但由于问题涉及引用的程序集,我不认为项目类型的差异是相关的(我可能是错误的)
假设我们有以下程序集:
1.用户管理程序集
Web应用程序程序集正在引用CMS控制程序集和用户管理程序集。
所以我们尝试在CMSControlAssembly上做一个汇编绑定,和你做的一样成功。
经过一番挖掘,灯光亮了起来:
问题是我们直接在我们的Web应用程序中使用CMSControlAssembly中的Web控件。2(assemblybinding就是这样设置的)
但是CMSControlAssembly也被UserManagementAssembly引用,这就是问题的原因。
UserManagementAssembly是使用比Web应用程序使用的CMSControlAssembly版本低的CMSControlAssembly版本编译的。
Web应用程序找不到这个较低版本的程序集,因为提供的唯一版本是assemblybinding的目标版本。
因此,实际上错误不是显示非功能性程序集绑定,而是UserManagementAssembly缺少程序集。