错误RG0000:无法加载文件或程序集“xxx”或其依赖项之一。访问被拒绝

时间:2010-08-30 20:05:52

标签: msbuild resgen

这适用于VS2010下的Windows窗体项目。

以下是我从MSBuild获得的消息:

  

错误RG0000:无法加载文件或   部件   “3rdPartyAssemblyUsedByProject,   版本= 1.1.263.0,文化=中立,   PublicKeyToken = 687bce93d7ce902c'或   其中一个依赖项。访问是   否认。第174行,第5位。   [C:\ XXX \ SRC \ BackOffice.csproj]

以下是用于解决此问题的命令行:

c:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/msbuild.exe BackOffice.csproj /p:PlatformTarget=x86

resx文件的第174行归因于错误:

<data name="generalImages.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
    <value>
        ...
    </value>
  </data>

generalImages是一个ImageList控件,其中包含用于表单上按钮的图像。

这在我的开发机器上工作正常,但在我的构建服务器上是一个问题。我的工作站是Windows 7 64位,构建服务器是Windows 2008 Server 64位。构建服务器确实安装了Windows 7.1 sdk。

如果我使用v3.5框架中的msbuild,则编译成功完成。我确实得到了这个警告消息,这个消息在这一点上没有引起任何问题: 项目文件包含ToolsVersion =“4.0”,此版本的MSBuild不支持。将项目视为具有ToolsVersion =“3.5”。

这样做的全部原因是实际上以4.0框架为目标并使用方法默认值,这在定位3.5时不起作用。

我搜索过这个问题。我遇到了很多与32位/ 64位问题有关的点击 - 图像格式是问题所在,但这不是我的问题。此错误表示“访问被拒绝”。我确实使用fuslogvw来试图找出拒绝访问的来源 - 但我没有看到它,但它实际上并没有找到任何程序集。程序集不在GAC中,而是在项目文件引用所在的项目文件的切向目录中。

这是融合日志:

  

*装配活页夹日志条目(2010年8月30日@ 1:44:48 PM)*

     

操作失败。结果:hr   = 0x80070002。系统找不到指定的文件。

     

装配管理器从以下位置加载:   C:\ WINDOWS \ Microsoft.NET \ Framework64 \ V2.0.50727 \的Mscorwks.dll   在可执行的C:\ Program下运行   文件\微软   的SDK \的Windows \ V7.1 \ BIN \ ResGen.exe   ---详细的错误日志如下。

     

===预绑定状态信息===日志:用户=域\用户日志:   DisplayName =   3rdPartyAssemblyUsedByProject,   版本= 1.1.263.0,文化=中立,   公钥= 687bce93d7ce902c   (完全指定)LOG:Appbase =   file:/// C:/ Program Files / Microsoft   SDKs / Windows / v7.1 / Bin / LOG:初始   PrivatePath = NULL LOG:Dynamic Base =   NULL LOG:Cache Base = NULL LOG:   AppName = NULL调用程序集:   System.Windows.Forms,Version = 2.0.0.0,   文化=中性,   公钥= b77a5c561934e089。   ===日志:此绑定在默认加载上下文中启动。日志:使用应用程序   配置文件:C:\ Program   文件\微软   的SDK \的Windows \ V7.1 \ BIN \ ResGen.exe.Config   日志:使用机器配置文件   从   C:\ WINDOWS \ Microsoft.NET \ Framework64 \ V2.0.50727 \ CONFIG \ machine.config中。   日志:政策后参考:   3rdPartyAssemblyUsedByProject,   版本= 1.1.263.0,文化=中立,   PublicKeyToken = 687bce93d7ce902c日志:   GAC Lookup没有成功。日志:   试图下载新的URL   file:/// C:/ Program Files / Microsoft   软件开发工具包/窗/ V7.1 /斌/ 3rdPartyAssemblyUsedByProject.DLL。   日志:尝试下载新网址   file:/// C:/ Program Files / Microsoft   软件开发工具包/窗/ V7.1 /斌/ 3rdPartyAssemblyUsedByProject / 3rdPartyAssemblyUsedByProject.DLL。   日志:尝试下载新网址   file:/// C:/ Program Files / Microsoft   软件开发工具包/窗/ V7.1 /斌/ 3rdPartyAssemblyUsedByProject.EXE。   日志:尝试下载新网址   file:/// C:/ Program Files / Microsoft   软件开发工具包/窗/ V7.1 /斌/ 3rdPartyAssemblyUsedByProject / 3rdPartyAssemblyUsedByProject.EXE。   日志:尝试的所有探测URL和   失败。

此时 - 我很难过。不知道下一步该去哪里。任何建议都会受到欢迎。

科特

4 个答案:

答案 0 :(得分:3)

它看起来很像已知的VS 2010错误here on blogs.msdn.com。如果是这样的话,似乎微软最早决定不修复它,直到Visual Studio 11,并且很多人(包括我们:|)都没有在后期工作中提到的变通办法。祝你好运。

答案 1 :(得分:1)

我与ResGen有类似的问题:错误RG0000:无法加载引用的程序集。在我的情况下,事实证明解决方案中的一个项目文件没有正确升级到vs2010。一旦我修复了4.0的工具引用,它就能正常工作。

答案 2 :(得分:0)

团队构建在服务帐户下运行。您是否检查过该帐户是否可以访问第三方程序集所在的程序文件位置?

答案 3 :(得分:0)

我遇到了MSDN blog中描述的确切问题,正如@ Joel的回答中所提到的那样。我发布的解决方法可以帮助我节省其他时间,因为我只用了半天时间尝试解决方案

我使用的解决方法在该博客文章的评论部分中讨论,该部分用于搜索j00L并在发生错误的resx中将其替换为j0yL。文件。此解决方法的不好的一面是您需要编辑resx。每次对图像列表进行更改时都会生成文件。