2

我有一个使用 MSBuild 构建的简单 C# 项目,它构建了一个无法使用 RegAsm 注册的程序集(错误 RA000)。

使用 Visual Studio 2010 构建的完全相同的 .csProj 是否成功创建了有效的程序集和 RegAsm 寄存器?

我在用C:\windows\microsoft.net\framework64\v4.0.30319\msbuild.exe

两个构建(MSBuild 4.0 和 Visual Studio 2010)都以管理员权限完成,因此启用了注册权限。

  • 我正在寻找一种解决/理解/调试的方法——这个令人沮丧的异常。
  • 可能有我缺少的 MSBuild 4.0 的修复程序/SPx 吗?
  • 是否有工具可以创建类似文件(或其他 .dll 格式化程序)的地图,以便我可以比较两个生成的程序集的差异?

MSbuild 生成的 RegAsm 输出bTest.dll

Microsoft (R) .NET Framework Assembly Registration Utility 4.0.30319.1
Copyright (C) Microsoft Corporation 1998-2004.  All rights reserved.
RegAsm : error RA0000 : Failed to load 'C:\test\bTest.dll' because it is not a valid .NET assembly

从 Visual Studio 2010 构建的 RegAsm 输出bTest.dll

Microsoft (R) .NET Framework Assembly Registration Utility 4.0.30319.1
Copyright (C) Microsoft Corporation 1998-2004.  All rights reserved.
Types registered successfully
Assembly exported to   'C:\test\bTest.tlb', and the type library was registered successfully

对于上述情况,bTest.csProj文件Register COM interop未选中,RegAsm 是作为后期构建步骤完成的。

如果构建是在Register COM interop选中的情况下完成的,则启用;Visual Studio 2010 正确构建生成bTest.tlb。但是,MSBuild 不会生成bTest.tlb文件,并且生成的程序集仍然无法使用 RegAsm 4.0 工具。

先感谢您。

凯文·韦特

4

1 回答 1

3

我正在使用 Jenkins,并且这项工作继承了从另一个非常相似的工作复制的特定平台设置表单(据我所知,这也可能是错误的)。

这样做PlatformTarget=x86会使生成的 assembly/.dll无法注册。无论是使用Register COM Interop复选框,还是使用RegAsm 工具。我怀疑这样一个受污染的 .dll 是我们想要的。

如果 MSBuild 使用这些 Jenkins 定义的命令行参数;生成的 .dll 将无法注册。当然,Visual Studio 2010 构建并没有这样做,因此构建成功......

-p:PlatformTarget=x86;Configuration=Release

更正以下内容,作业构建成功,并且创建 *.tlb 也非常好!

-p:Configuration=Release

解决了!

于 2013-10-27T16:50:47.283 回答