9

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

在一台特定的开发机器上,尝试构建 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 下运行

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

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

日志:DisplayName = ProjectB,版本 = 0.0.0.0,文化 = 中性,PublicKeyToken = aaaaaaaaaaaaaaa,处理器架构 = MSIL(完全指定)

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

日志:初始 PrivatePath = NULL

日志:动态基础 = NULL

日志:缓存基础 = NULL

日志:AppName = devenv.exe

调用程序集:(未知)。

LOG:此绑定在默认加载上下文中开始。

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

LOG:使用主机配置文件:

LOG:使用 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config 中的机器配置文件。

日志:策略后参考:ProjectB,版本=0.0.0.0,文化=中性,PublicKeyToken=aaaaaaaaaaaaaaaa,处理器架构=MSIL

日志:GAC 查找不成功。

日志:正在尝试下载新的 URL file:///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 file:///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 file:///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 file:///C:/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/PrivateAssemblies/ProjectB/ProjectB.EXE。日志:正在尝试下载新的 URL 文件:///C:/程序文件 (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 file:///C:/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/PrivateAssemblies/DataCollectors/ProjectB.EXE。日志:正在尝试下载新的 URL file:///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:/程序文件 (x86)/Microsoft Visual Studio 10.0/Common7/IDE/PrivateAssemblies/DataCollectors/x86/ProjectB/ProjectB.EXE。日志:正在尝试下载新的 URL file:///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 file:///C:/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/CommonExtensions/Platform/Debugger/ProjectB/ProjectB.EXE。LOG:所有探测 URL 都已尝试并失败。0/Common7/IDE/PrivateAssemblies/DataCollectors/x86/ProjectB/ProjectB.EXE。日志:正在尝试下载新的 URL file:///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 file:///C:/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/CommonExtensions/Platform/Debugger/ProjectB/ProjectB.EXE。LOG:所有探测 URL 都已尝试并失败。0/Common7/IDE/PrivateAssemblies/DataCollectors/x86/ProjectB/ProjectB.EXE。日志:正在尝试下载新的 URL file:///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 file:///C:/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/CommonExtensions/Platform/Debugger/ProjectB/ProjectB.EXE。LOG:所有探测 URL 都已尝试并失败。正在尝试下载新的 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 file:///C:/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/CommonExtensions/Platform/Debugger/ProjectB/ProjectB.EXE。LOG:所有探测 URL 都已尝试并失败。正在尝试下载新的 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 file:///C:/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/CommonExtensions/Platform/Debugger/ProjectB/ProjectB.EXE。LOG:所有探测 URL 都已尝试并失败。/程序文件 (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 file:///C:/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/CommonExtensions/Platform/Debugger/ProjectB/ProjectB.EXE。LOG:所有探测 URL 都已尝试并失败。/程序文件 (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 file:///C:/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/CommonExtensions/Platform/Debugger/ProjectB/ProjectB.EXE。LOG:所有探测 URL 都已尝试并失败。/程序文件(x86)/Microsoft Visual Studio 10.0/Common7/IDE/CommonExtensions/Platform/Debugger/ProjectB/ProjectB.EXE。LOG:所有探测 URL 都已尝试并失败。/程序文件(x86)/Microsoft Visual Studio 10.0/Common7/IDE/CommonExtensions/Platform/Debugger/ProjectB/ProjectB.EXE。LOG:所有探测 URL 都已尝试并失败。

我试过了:

  1. 删除对 ProjectB 的引用并重新添加它:
    • a) 作为项目参考
    • b) 作为手动参考,直接到 projectB 的 debug 文件夹
  2. 手动将 ProjectB.dll 放入 GAC
  3. 将“复制本地”选项从 True 更改为 False(并返回 True)

只有 (2) 将程序集放在 GAC 中才能构建 ProjectC。为什么它没有找到应有的程序集(并且在其他机器上)?

4

2 回答 2

6

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

于 2012-06-18T22:46:18.083 回答
5

所以事实证明,无法找到程序集的原因是因为我们延迟签署程序集,这意味着:

因为程序集没有有效的强名称签名,所以必须关闭对该签名的验证。您可以通过使用带有强名称工具的 –Vr 选项来执行此操作。

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

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

无法加载文件或程序集 'ProjectC.Tests, Version=0.0.0.0, Culture=neutral, PublicKeyToken=e72f8d3506b83180' 或其依赖项之一。强名称验证失败。(来自 HRESULT 的异常:0x8013141A)

于 2012-06-20T09:21:22.990 回答