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

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

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

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

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

*assembly活页夹日志条目(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下运行

—详细的错误日志如下。

===预绑定状态信息=== LOG:User = DOMAIN \ username

日志: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

日志:动态Base = 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 Lookup未成功。

日志:尝试下载新的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的debug文件夹的手动引用
  2. 手动将ProjectB.dll放入GAC
  3. 将“复制本地”选项从True更改为False(并返回True)

并且只有(2)将组件放置在GAC中允许ProjectC构建。 为什么它没有找到它应该的组件(在其他机器上也是如此)?

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

所以事实certificate无法找到程序集的原因是因为我们对程序集进行了延迟签名这意味着:

由于程序集没有有效的强名称签名,因此必须关闭该签名的validation。 您可以通过使用强名称工具使用-Vr选项来完成此操作。

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

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

无法加载文件或程序集“ProjectC.Tests,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = e72f8d3506b83180”或其中一个依赖项。 强名称validation失败。 (HRESULTexception:0x8013141A)