MSBuild 构建的程序集无法注册,RegAsm (错误 RA000);与Visual Studio 2010完全相同



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

使用 Visual Studio 2010 构建的完全相同的 .csProj 创建有效的程序集,并且 RegAsm 成功注册?

我正在使用C:windowsmicrosoft.netframework64v4.0.30319msbuild.exe

这两个版本(MSBuild 4.0 和 Visual Studio 2010)都是作为管理员权限完成的,因此启用了注册权限。

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

来自 MSbuild 构建bTest.dll的 RegAsm 输出:

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:testbTest.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:testbTest.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 工具失败。

提前谢谢你。

凯文·韦特

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

具有此PlatformTarget=x86会使生成的程序集/.dll不可注册。无论是使用Register COM Interop复选框,还是使用 RegAsm 工具。我怀疑这种污点.dll是想要的。

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

-p:PlatformTarget=x86;Configuration=Release

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

-p:Configuration=Release

解决!

最新更新