定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

时间:2013-05-07 17:56:34

标签: c# asp.net asp.net-mvc visual-studio nhibernate

签署第三方程序集并将其添加到GAC后,我收到以下错误:还有程序集绑定日志条目显示this error

它说不匹配的程序集不确定如何删除所有obj和bin折叠并批量构建应用程序+重新导入dll。

 Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\11.0\WebDev.WebServer40.exe

--- A detailed error log follows. 
=== Pre-bind state information ===
LOG: User = AKBARCA\user

LOG: DisplayName = ClubStarterKit.Core, Version=3.0.1.0, Culture=neutral, PublicKeyToken=null
 (Fully-specified)

LOG: Appbase = 

file:///C:/Users/user/Desktop/NhibernateMediumTrust/NhibernateMediumUpgrade/direct/clubstar

terkit v3 preview/ClubStarterKit.Web/

LOG: DEVPATH = C:\ProgramData\Red Gate\.NET Reflector\DevPath

LOG: Initial PrivatePath = 

C:\Users\user\Desktop\NhibernateMediumTrust\NhibernateMediumUpgrade\direct\clubstarterkit v3 preview\ClubStarterKit.Web\bin
Calling assembly : ClubStarterKit.Web, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.

8 个答案:

答案 0 :(得分:31)

根据我的经验,这种情况会发生,通常是在您发布应用程序之后以及当您使用不同版本的nuget软件包时。如果这恰好也是您的情况,我发现修复它的最佳方法是右键单击解决方案(而不是单个项目)并选择“Manage Nuget Packages”。然后,在已安装的软件包中找到有问题的程序集。您可能会多次列出它。在每个旧版本的软件包上单击“管理”,然后取消选中所有项目。一旦只有最新版本的包仍然在列表中。单击“管理”,然后重新检查需要该软件包的任何项目。这将基本上将它们全部升级为使用相同版本的软件包,并应解决您的不匹配错误。

答案 1 :(得分:5)

我遇到了类似的问题。就我而言,我的解决方案中有多个项目。

其中一个项目是引用EntityFramework 4.0,该项目在另一个引用EntityFramework 5.0的项目中被引用。我把它们同步了,问题就消失了。

答案 2 :(得分:3)

...坎 我遇到了类似的错误信息。

在我的情况下,我手动更新了程序集的版本。

The error message

在引用的程序集中,我有另一个版本......

所以,我在web.config中更新了它。

Properies of the DLL

这解决了我的问题。

您的=== Pre-bind state information ===似乎不完整。 通常它显示执行,最后一行显示错误,因此,我们只能帮助分享我们的经验。 例: Last line of the LOG info

我希望遇到此问题的其他人认为这有用。

答案 3 :(得分:2)

就我而言,当依赖程序集的web.config <bindingRedirect>中指定的版本(例如Newtonsoft.Json)与实际版本中的版本不匹配时,会发生错误。 bin文件夹。更新web.config中的版本号后,问题就解决了。

screenshot of web.config

答案 4 :(得分:1)

当我在过去遇到这个问题时,我从gac中删除了所有项目的dll,重建了解决方案,然后iisreset并且它已经解决了。

答案 5 :(得分:0)

我使用 FASTjson

收到此错误

_jsonConfig = fastJSON.JSON.ToObject<jsonConfig>(jsonConfigFileContents);

这条线失败了:

Type t = Type.GetType(typename);

System.RuntimeTypeHandle.GetTypeByName

中导致异常

与JSON对象模型相比,问题是JSON文件存在差异。

解决方案是将JSON对象模型重新保存到文件,例如:

string jsonSettings = fastJSON.JSON.ToJSON(JSONObjectModel);
File.WriteAllText(JSONFilePath, jsonSettings);

答案 6 :(得分:0)

解决此问题的一种方法是,在解决方案资源管理器中右键单击“管理解决方案的NuGet包”。 在那里,转到“合并”并找到导致问题的包。确保解决方案中的所有项目都使用相同的版本。

enter image description here

答案 7 :(得分:0)

我有一个不同的原因:在我的情况下,我之前使用过各种nuget包版本,并且我有一个app.config由于某种原因已经自动生成了这种内容:

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Extensions.DependencyInjection" publicKeyToken="adb9793829ddae60" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.1.0" />
  </dependentAssembly>

所以我只安装了版本1.1.0.0,但是由于这个重定向指令,它查找了1.1.1.0,即使Visual Studio安装了1.1.0.0的nuget。将newVersion更改为1.1.0.0修复了所有内容:

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Extensions.DependencyInjection" publicKeyToken="adb9793829ddae60" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.0.0" />
  </dependentAssembly>