无法加载文件或程序集。HRESULT 异常:0x80131040。

31

我创建了我的第一个MVC 4项目,它在本地服务器上运行得很完美。但是当我将其发布到本地文件夹并上传文件夹内容到托管服务器时,我试图运行它,却出现了这个错误:

无法加载文件或程序集"DotNetOpenAuth.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246"或它的某一个依赖项。系统找不到指定的文件。 有人可以帮帮我吗?

Web.config:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
    <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" />
    <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
  </dependentAssembly>
</assemblyBinding>

备注:同样的项目在Web Forms上能够在托管服务器上运行。


1
你是否检查过编译网站的 .bin 文件夹中是否存在该 .dll 文件? - Joseph Woodward
请确保在dll上选择了“复制本地”。这些可能是棘手的错误,因为出现错误的dll有时不是问题所在,“它的一个依赖项”可能是问题。最后的办法是在服务器上安装框架。 - KevDevMan
你的主机支持MVC吗? - Matt Tabor
但是当我在本地服务器上运行相同的发布项目时,它可以工作! - levkaster
我该如何检查主机是否支持MVC? - levkaster
9个回答

71

终于找到答案了!! 前往“参考资料” --> 右键单击导致问题的dll文件 --> 选择属性 --> 检查版本 --> 将属性中的版本与web config匹配

<dependentAssembly>
    <assemblyIdentity name="YourDllFile" publicKeyToken="2780ccd10d57b246"               culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-YourDllFileVersion" newVersion="YourDllFileVersion" />
  </dependentAssembly>

3
在我使用<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">而不是只使用<assemblyBinding">之前,这个解决方案对我没有用。 - edank
我的 Web 配置文件已经有了正确的版本。这对我没有起作用。 - user2903379
我曾遇到过这个问题的一种变体,终于搞定了。我的 web.config 看起来很好,和 .NET 构建项目时没有错误,但在发布期间却出现了警告。我发现 csproj 文件中有两个对 ANTLR3.Runtime 的引用。这是包更新的残余物。通过在记事本中编辑 csproj 将其去除,警告就消失了。 - Debbie A
成功了!这个情景最合乎逻辑的答案。 - undefined

8
我立即生效的方法是:
  • 我找到了bin文件夹(下图所示)。

  • 将所有dll移动到其他文件夹以确保安全。

  • 然后重新构建项目。

  • 在解决问题之后,删除旧的dll文件。

打开文件位置


这个方法奏效了。我懒得跟随其他建议,这样看起来更简单。我认为问题是由于同一解决方案中的不同项目具有相同 nuget 包的不同版本引起的。 - YongaJ

6
如果你的解决方案包含两个项目相互交互,并且两个项目都使用同一个引用,但是如果这两个项目中各自引用的版本不同,那么也会出现错误。请确保更新所有引用到最新版本。

2
我遇到了同样的问题,NuGet包的版本与项目引用中的版本不同。我必须更改配置文件中的版本以匹配项目中引用的版本。转到“引用”-->右键单击导致问题的dll文件-->选择属性-->检查版本-->将属性中的版本与Web配置文件匹配。这应该解决问题。

太棒了!这解决了我在一个使用我编写的dll引用的项目中遇到的问题。谢谢! - Guy_g23

0

我曾经遇到过同样的问题,但以上方法都没有解决它。 Web.config 的代码如下:

<dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.9.0" newVersion="5.2.9.0" />
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.9.0" newVersion="5.2.9.0" />
</dependentAssembly>

我添加了缺失的dependentAssembly标签,问题得到解决。可能是在解决冲突时发生的。这可能有助于其他人的问题。


这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - lee-m

0
将以下dll文件添加到bin文件夹中:
DotNetOpenAuth.AspNet.dll
DotNetOpenAuth.Core.dll
DotNetOpenAuth.OAuth.Consumer.dll
DotNetOpenAuth.OAuth.dll
DotNetOpenAuth.OpenId.dll
DotNetOpenAuth.OpenId.RelyingParty.dll

如果您不需要它们,请从名为“DotNetOpenAuth.Core”的配置中删除dependentAssemblies等。

所有这些dll文件都存在于bin文件夹中。 - levkaster
1
检查配置文件中的dependentAssemblies。 - Jeyhun Rahimov

0

检查是否有 HRESULT: 0x80131040 错误的项目被任何项目使用/引用。如果是,请检查这些项目是否引用了相似的 .dll,并且版本号相同。如果它们的版本号不同,则会导致上述错误。


0

尝试这个:

  • 编辑PublishProfiles文件夹中的*.pubxml文件
  • 将DeleteExistingFiles设置为true
  • 更新所有nugget包,重新构建,重新发布,问题解决!

当我遇到同样的问题时,这个方法对我有用。


0

我遇到了itextsharp和itextsharp.xmlworker dlls的问题,出现了exception-from-hresult-0x80131040异常,所以我从引用中删除了这两个dlls,并直接从nuget packages下载了新的dlls,这解决了我的问题。

也许这种方法对其他人解决问题有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接