装配绑定错误:绑定结果:hr = 0x80070002。该系统找不到指定的文件

时间:2012-06-14 09:44:06

标签: c# .net-assembly assembly-resolution

我有一个包含类库(ProjectA)和两个Sharepoint项目(ProjectB& ProjectC)的Visual Studio 2010解决方案。依赖顺序是ProjectB引用ProejctA和ProjectC引用ProjectA和amp;项目B

在一台特定的开发机器上,我在尝试构建ProjectC时遇到以下错误:

  

编译失败。无法加载一个或多个请求的类型。检索LoaderExceptions属性以获取更多信息。

在查看融合日志时,我注意到以下错误:

  

*装配活页夹日志条目(14/06/2012 @ 09:38:32)*

     

操作失败。

     

绑定结果:hr = 0x80070002。系统找不到指定的文件。

     

装配管理器从以下位置加载:C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ clr.dll

     

在可执行文件C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe下运行

     

---详细的错误日志如下。

     

===预绑定状态信息===   日志:用户= DOMAIN \用户名

     

LOG:DisplayName = ProjectB,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = aaaaaaaaaaaaaaa,processorArchitecture = MSIL    (完全指定的)

     

日志:Appbase = file:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE /

     

日志:初始PrivatePath = NULL

     

日志:动态基础=空白

     

日志:缓存基数= NULL

     

日志:AppName = devenv.exe

     

调用程序集:(未知)。

     

日志:此绑定在默认加载上下文中启动。

     

日志:使用应用程序配置文件:C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe.Config

     

日志:使用主机配置文件:

     

日志:使用C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config中的计算机配置文件。

     

日志:政策后参考:ProjectB,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = aaaaaaaaaaaaaaa,processorArchitecture = MSIL

     

日志:GAC查询失败。

     

日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / ProjectB.DLL。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / ProjectB / ProjectB.DLL。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / PublicAssemblies / ProjectB.DLL。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / PublicAssemblies / ProjectB / ProjectB.DLL。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / PrivateAssemblies / ProjectB.DLL。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / PrivateAssemblies / ProjectB / ProjectB.DLL。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / CommonExtensions / Microsoft / TemplateProviders / ProjectB.DLL。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / CommonExtensions / Microsoft / TemplateProviders / ProjectB / ProjectB.DLL。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / PrivateAssemblies / DataCollectors / ProjectB.DLL。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / PrivateAssemblies / DataCollectors / ProjectB / ProjectB.DLL。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / PrivateAssemblies / DataCollectors / x86 / ProjectB.DLL。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / PrivateAssemblies / DataCollectors / x86 / ProjectB / ProjectB.DLL。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / CommonExtensions / Microsoft / Editor / ProjectB.DLL。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / CommonExtensions / Microsoft / Editor / ProjectB / ProjectB.DLL。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / CommonExtensions / Platform / Debugger / ProjectB.DLL。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / CommonExtensions / Platform / Debugger / ProjectB / ProjectB.DLL。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / ProjectB.EXE。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / ProjectB / ProjectB.EXE。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / PublicAssemblies / ProjectB.EXE。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / PublicAssemblies / ProjectB / ProjectB.EXE。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / PrivateAssemblies / ProjectB.EXE。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / PrivateAssemblies / ProjectB / ProjectB.EXE。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / CommonExtensions / Microsoft / TemplateProviders / ProjectB.EXE。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / CommonExtensions / Microsoft / TemplateProviders / ProjectB / ProjectB.EXE。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / PrivateAssemblies / DataCollectors / ProjectB.EXE。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / PrivateAssemblies / DataCollectors / ProjectB / ProjectB.EXE。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / PrivateAssemblies / DataCollectors / x86 / ProjectB.EXE。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / PrivateAssemblies / DataCollectors / x86 / ProjectB / ProjectB.EXE。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / CommonExtensions / Microsoft / Editor / ProjectB.EXE。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / CommonExtensions / Microsoft / Editor / ProjectB / ProjectB.EXE。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / CommonExtensions / Platform / Debugger / ProjectB.EXE。   日志:尝试下载新的URL文件:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Common7 / IDE / CommonExtensions / Platform / Debugger / ProjectB / ProjectB.EXE。   日志:所有探测URL都已尝试失败。

我试过了:

  1. 删除对ProjectB的引用并重新添加它们:
    • a)作为项目参考
    • b)直接作为projectB的调试文件夹的手动引用
  2. 手动将ProjectB.dll放入GAC
  3. 更改"复制本地"选项从True到False(并返回True)
  4. 只有(2)将程序集放在GAC中才允许ProjectC构建。 为什么不能找到它应该的组件(在其他机器上也是如此)?

2 个答案:

答案 0 :(得分:6)

PublicKeyToken = aaaaaaaaaaaaaaaa可能不同或者可能是程序集的版本号不同。我认为你应该按照描述使用 Fusion Log Viewer to Debug,并希望你能完全解决问题。

答案 1 :(得分:5)

所以事实证明无法找到集合的原因是因为我们Delayed Signing the Assemblies这意味着:

  

由于程序集没有有效的强名称签名,因此必须关闭该签名的验证。您可以使用-Vr选项和强名称工具来执行此操作。

我已经为所有必需的公钥执行了此操作,但仅限于x64 Visual Studio命令提示符。我还需要在x86版本的Visual Studio命令提示符中添加x86的验证跳过。

我只是设法找到了这个,因为尝试使用特定的基于命令的构建/部署脚本时,我在其中一个测试程序集中注意到以下异常:

  

无法加载文件或程序集'ProjectC.Tests,Version = 0.0.0.0,   Culture = neutral,PublicKeyToken = e72f8d3506b83180'或其中一个   依赖。强名称验证失败。 (HRESULT的例外情况:   0x8013141A)