2013-10-27 482 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

相關問題