无法加载文件或程序集“DotNetOpenAuth.AspNet”或其某个依赖项

7

我有一个Asp.net项目,在该项目的web.config中,我有如下配置:

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">      
      <dependentAssembly>
          <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" culture="neutral" />
          <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
      </dependentAssembly>
      <dependentAssembly>
          <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" culture="neutral" />
          <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

(已经跟随了另一篇帖子中的应该修复的方法)但在运行时,我收到以下错误信息:

Could not load file or assembly 'DotNetOpenAuth.AspNet' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

当我打开项目属性并转到引用时,我可以看到有一个DotNetOpenAuth.Core条目,一个DotNetOpenAuth.AspNet条目,一个DotNetOpenAuth.OAuth条目,一个DotNetOpenAuth.OAuth.Consumer条目,一个DotNetOpenAuth.OpenId 条目和一个DotNetOpenAuth.OpenId.RelyingParty条目,它们都设置为复制本地= true。 可能出了什么问题呢?

编辑:
这是完整的错误日志,对我来说似乎仍然尝试加载4.3.0.0版本

汇编加载跟踪: 下面的信息可以帮助确定为什么无法加载程序集'DotNetOpenAuth.AspNet'。
=== 预绑定状态信息=== LOG:用户= MegaBadTouch\James LOG:显示名称 = DotNetOpenAuth.AspNet(部分) WRN:提供了一个程序集的部分绑定信息: WRN:程序集名称:DotNetOpenAuth.AspNet | 域 ID:2 WRN:只提供程序集显示名称的一部分导致了部分绑定。 WRN:这可能导致绑定器加载不正确的程序集。 WRN:建议为程序集提供完全指定的文本标识, WRN:该标识由简单名称、版本、区域性和公钥令牌组成。 WRN:有关此问题的更多信息和常见解决方案,请参阅白皮书 http://go.microsoft.com/fwlink/?LinkId=109270。 LOG:Appbase = file:///C:/Users/James/Documents/Visual Studio 2012/Projects/Archive/Archive/ LOG:初始PrivatePath = C:\Users\James\Documents\Visual Studio 2012\Projects\Archive\Archive\bin 调用程序集:(未知)。 === LOG:此绑定在默认加载上下文中开始。 LOG:使用应用程序配置文件:C:\Users\James\Documents\Visual Studio 2012\Projects\Archive\Archive\web.config LOG:使用主机配置文件:C:\Users\James\Documents\IISExpress\config\aspnet.config LOG:正在使用来自C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config的机器配置文件。 LOG:此时不对引用执行策略(私有、自定义、部分或基于位置的程序集绑定)。 LOG:尝试下载新的URL文件:///C:/Users/James/AppData/Local/Temp/Temporary ASP.NET Files/root/47d58003/7c1d4013/DotNetOpenAuth.AspNet.DLL。 LOG:尝试下载新的URL文件:///C:/Users/James/AppData/Local/Temp/Temporary ASP.NET Files/root/47d58003/7c1d4013/DotNetOpenAuth.AspNet/DotNetOpenAuth.AspNet.DLL。 LOG:尝试下载新的URL文件:///C:/Users/James/Documents/Visual Studio 2012/Projects/Archive/Archive/bin/DotNetOpenAuth.AspNet.DLL。 LOG:使用应用程序配置文件:C:\Users\James\Documents\Visual Studio 2012\Projects\Archive\Archive\web.config LOG:使用主机配置文件:C:\Users\James\Documents\IISExpress\config\aspnet.config LOG:正在使用来自C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config的机器配置文件。 LOG:在应用程序配置文件中找到重定向:4.0.0.0重定向到4.1.0.0。 LOG:后策略引用:DotNetOpenAuth.AspNet,Version=4.1.0.0,Culture=neutral,PublicKeyToken=2780ccd10d57b246 LOG:尝试下载新的URL文件:///C:/Users/James/AppData/Local/Temp/Temporary ASP.NET Files/root/47d58003/7c1d4013/DotNetOpenAuth.AspNet.DLL。 LOG:尝试下载新的URL文件:///C:/Users/James/AppData/Local/Temp/Temporary ASP.NET Files/root/47d58003/7c1d4013/DotNetOpenAuth.AspNet/DotNetOpenAuth.AspNet.DLL。 LOG:尝试下载新的URL文件:///C:/Users/James/Documents/Visual Studio 2012/Projects/Archive/Archive/bin/DotNetOpenAuth.AspNet.DLL。 WRN:比较程序集名称导致不匹配:次要版本 ERR:无法完成程序集的设置(hr = 0x80131040)。探测终止。
堆栈跟踪:
[FileLoadException: 无法加载文件或程序集“DotNetOpenAuth.AspNet”或其某一个依赖项。找到的程序集清单定义与程序集引用不匹配

后置策略参考:DotNetOpenAuth.AspNet,版本=4.1.0.0,文化=中立,公钥令牌=2780ccd10d57b246。将4.0重定向到4.1会导致加载链失败。 - Marvin Smit
请问?你是什么意思? - James T
需要 DOtNetOpenAuth.AspNet.dll,它试图加载4.1版本,但似乎不可用。请检查您所拥有的版本,并根据需要添加重定向(虽然我不确定它们是否兼容)。 - Marvin Smit
肯定 'oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0"' 标签应该让它加载任何可用的东西,是吗? - James T
它肯定正在获取另一个策略。它被重定向到4.1。请仔细检查您的配置是否实际使用? - Marvin Smit
我该如何检查? - James T
2个回答

3

我曾经遇到过同样的错误。可能是你添加的引用中有一个被忽略了。你只需要删除这些引用,然后手动添加它们,或者将你的代码复制到一个新的解决方案中,就可以解决问题了。我将我的代码复制到一个“新空项目”中运行,没有任何问题。

打开一个新的空项目,并复制你的代码到其中,应该能够解决问题。


-1

我把版本改成了4.1.0.0,然后它对我起作用了。

   <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780CCD10D57B246" culture="neutral" />
        <bindingRedirect oldVersion="1.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780CCD10D57B246" culture="neutral" />
        <bindingRedirect oldVersion="1.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
    </assemblyBinding>

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