我有一个网站项目,我使用内置的开发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
对我而言似乎忽略了我的重定向。我一直在看它一个小时,我有拼写错误吗?
答案 0 :(得分:1)
我知道它已经有一段时间了,但也许这可以帮助某个人......
我们在某个项目上遇到了完全相同的问题, 它是一个Web应用程序,而不是一个网站,但由于问题涉及引用程序集 我不认为项目类型的差异是相关的(我可能是错的)
假设我们有以下程序集:
WebApplicationAssembly
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