Msbuild 错误RG0000:无法加载文件或程序集';xxx和x27;或者它的一个依赖项。访问被拒绝

Msbuild 错误RG0000:无法加载文件或程序集';xxx和x27;或者它的一个依赖项。访问被拒绝,msbuild,resgen,Msbuild,Resgen,这适用于VS2010下的windows窗体项目 以下是我从MSBuild获得的消息: 错误RG0000:无法加载文件或 装配 “第三方SemblyusedbyProject, 版本=1.1.263.0,区域性=中性, PublicKeyToken=687bce93d7ce902c'或 它的一个依赖项。访问权限是 否认。第174行,位置5。 [C:\xxx\src\BackOffice.csproj] 以下是用于启动此功能的命令行: c:/WINDOWS/Microsoft.NET/Framewo

这适用于VS2010下的windows窗体项目

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

错误RG0000:无法加载文件或 装配 “第三方SemblyusedbyProject, 版本=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,编译将成功完成。我确实收到了这条警告信息,但此时不会给我带来任何问题: 项目文件包含此版本的MSBuild不支持的ToolsVersion=“4.0”。将项目视为拥有ToolsVersion=“3.5”

这样做的全部原因是实际针对4.0框架,并使用方法默认值之类的东西,这在针对3.5时不起作用

我找了又找。我遇到了很多与32位/64位问题相关的问题,其中图像格式是问题所在,但这不是我的问题。此错误表示“访问被拒绝”。我确实使用fuslogvw试图找出拒绝访问的原因——但我没有看到它是从哪里来的,但它实际上没有找到任何程序集。程序集不在GAC中,而是位于项目文件引用所在的项目文件的切线目录中

以下是融合日志:

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

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

从以下位置加载程序集管理器: C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscorwks.dll 在可执行C:\程序下运行 文件\Microsoft SDK\Windows\v7.1\Bin\ResGen.exe ---下面是详细的错误日志

===预绑定状态信息===日志:用户=域\用户日志: 显示名= 第三方SemblyusedbyProject, 版本=1.1.263.0,区域性=中性, PublicKeyToken=687bce93d7ce902c (完全指定)日志:Appbase= file:///C:/Program 文件/微软 SDKs/Windows/v7.1/Bin/LOG:Initial PrivatePath=NULL日志:动态基= 空日志:缓存基=空日志: AppName=NULL调用程序集: System.Windows.Forms,版本=2.0.0.0, 文化=中立, PublicKeyToken=b77a5c561934e089。 ==日志:此绑定在默认加载上下文中启动。日志:使用应用程序 配置文件:C:\Program 文件\Microsoft SDK\Windows\v7.1\Bin\ResGen.exe.Config 日志:使用计算机配置文件 从…起 C:\Windows\Microsoft.NET\Framework64\v2.0.50727\config\machine.config。 日志:发布策略引用: 第三方SemblyusedbyProject, 版本=1.1.263.0,区域性=中性, PublicKeyToken=687bce93d7ce902c日志: GAC查找失败。日志: 正在尝试下载新的URL file:///C:/Program 文件/微软 SDKs/Windows/v7.1/Bin/3rdPartyAssemblyUsedByProject.DLL。 日志:正在尝试下载新URL file:///C:/Program 文件/微软 SDKs/Windows/v7.1/Bin/3rdpartyasemblyusedbyproject/3rdpartyasemblyusedbyproject.DLL。 日志:正在尝试下载新URL file:///C:/Program 文件/微软 SDKs/Windows/v7.1/Bin/3rdPartyAssemblyUsedByProject.EXE。 日志:正在尝试下载新URL file:///C:/Program 文件/微软 SDKs/Windows/v7.1/Bin/3rdpartyasemblyusedbyproject/3rdpartyasemblyusedbyproject.EXE。 日志:所有尝试的探测URL和 失败了

在这一点上,我被难住了。不知道下一步该去哪里。欢迎任何建议


Cort

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

我在ResGen中遇到类似问题:错误RG0000:无法加载引用的程序集。在我的例子中,解决方案中的一个项目文件没有正确升级到vs2010。一旦我将工具引用设置为4.0,它就正常工作了

它看起来很像所描述的已知VS 2010错误。如果是这样的话,微软似乎已经决定最早在Visual Studio 11之前不修复它,而且对于许多人(包括我们:|)来说,在后期工作中没有提到任何解决方法。祝你好运。

正如@Joel在回答中提到的那样,我遇到了本文中描述的问题。我想发布一个对我有效的解决方案,以节省其他人的时间,因为我只花了半天时间尝试解决方案


我使用的解决方法在那篇博文的评论部分进行了讨论,它是搜索j00L并在错误发生的resx中用j0yL替换它。文件夹。这种解决方法的缺点是您需要编辑resx。每次对imagelist进行更改时,都会创建一个文件。

我正在从命令行手动运行此操作。我已经验证了在我拥有第三方程序集的地方,我作为用户登录的用户已对文件进行了完全控制检查,并且是该文件的所有者……此外,正如我试图从包含我的fusion日志中显示的那样——程序集从未真正找到过——它的位置位于csproj文件位置的../lib/3rdpartyassembly.dll中。您可以使用/p:ReferencePath=“\”指定dll的位置。尝试一下——没有更改。如果我编辑resx文件并删除imagelist的数据元素,编译就完成了,因此csc任务获得了正确的路径,但resgen似乎没有。