2013-10-27 480 views
2

当我用MSBuild构建一个简单的C#项目时,它构建了一个不能用RegAsm注册的程序集(错误RA000)。MSBuild构建的程序集无法注册,RegAsm(错误RA000);完全相同.csProj与Visual Studio 2010创建有效的程序集?

使用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:从Visual Studio 2010内置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:\test\bTest.dll' because it is not a valid .NET assembly 

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

预先感谢您。

凯文·韦特

回答

3

我使用詹金斯,而这个工作已经继承了另一个非常类似的工作被复制这个特定的平台设置形式(即也可能是错误的,因为我知道明白)。

具有这种PlatformTarget=x86使得所得到的组件/ .DLL 注销-能够。与Register COM Interop复选框,或与RegAsm工具。我怀疑这样一个污点的.dll是什么想要的。

如果MSBuild使用这些Jenkins定义的命令行参数;生成的.dll将是不可注册。当然还有Visual Studio 2010的版本是不这样做,从而成功打造...

-p:PlatformTarget=x86;Configuration=Release 

纠正以下和作业成功构建并创建* .TLB完美也没关系!

-p:Configuration=Release 

已解决!

+0

您使用了哪个版本的regasm?如果您针对x86程序集使用Framework64版本,则会收到一条错误消息,指出“RegAsm:error RA0000:无法加载'YourLib.dll',因为它不是有效的.NET程序集”。使用x86版本,它会工作。 – timB33

相关问题