使用VS2008 devenv.exe在命令行上构建Biztalk 2009解决方案时出现“随机”.NET运行时错误

时间:2012-02-17 14:42:05

标签: visual-studio msbuild biztalk tfsbuild biztalk-2009

要构建Biztalk 2009项目作为TFS 2010团队构建的一部分,我正在使用MSBuild exec任务来发布到VS2008 devenv.exe,就像这样......

<Exec Command="&quot;$(BuildMachineLoc)devenv.exe&quot; &quot;$(BiztalkSolutionPath)&quot; /Build &quot;$(BuildFlavor)&quot; /out &quot;$(DropLocation)\$(BuildNumber)\CoreBiztalkBuildOutputLog.txt&quot;"/>

大约95%的时间都能正常工作。但是,随机地,构建将失败,并在日志中出现以下错误。 (我稍微编辑了这个以省略我正在建设的服务的名称)

Build FAILED.
MSB3073: The command ""C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe" "[path to my solution]" /Build "Release" /out "[path to my drop location]\CoreBiztalkBuildOutputLog.txt"" exited with code -2146233082.

如果您检查CoreBiztalkBuildOutputLog.txt文件,它会显示所有内容都是成功构建的。如果将失败构建的此日志与成功的构建进行比较,则它们是相同的。

代码-2146233082不是很具描述性......所以我从构建机器上的事件查看器中找到了实际的异常。

Event Type: Error
Event Source:   .NET Runtime
Event Category: None
Event ID:   1023
Date:       2/17/2012
Time:       2:58:41 AM
User:       N/A
Computer:   XXXXXXXX
Description:
.NET Runtime version 2.0.50727.3625 - Fatal Execution Engine Error (7A0BC59E) (80131506)

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

在网上稍微戳了一下,表明这是某种CLR错误。建议的解决方案是重新安装\修复.NET框架。这似乎是有道理的,因为我之前使用的构建机器是一只7岁的恐龙,只要我拥有它就有各种各样的问题。 (〜2年)

我最终配置了一个新VM来运行我的Biztalk 2009版本,因此我可以完全退出旧的物理服务器。然而,令我懊恼的是,我发现我在新服务器上遇到了同样的随机CLR错误,大约有5%的时间。

基于此,我猜测这是.NET框架中的一些缺陷,我无法修复。但如果有人有任何想法我都会听到。

1 个答案:

答案 0 :(得分:1)

如果您想尝试MSBuild任务,请参阅示例中的已翻译任务:

<MSBuild Projects="$(BiztalkSolutionPath)"
    Targets="Build"
    Properties="Configuration=$(BuildFlavor);" />

由于您的示例中不清楚$(BuildFlavor)是否确定ConfigurationArchitecture属性,因此您可能需要根据需要对其进行更改。

OutputPath将在项目级别设置 - 我个人使用MSBuild任务输出任务参数来获取构建的程序集。部署到BizTalk时(使用BTSTask),您可以将BizTalk程序集复制到所需目录,并且不必在构建任务中关心它。

正如布莱恩建议的那样,看看BizTalk Deployment Framework可能是值得的,但很明显,扔掉一个正在运行的解决方案不适合你。