MSBuild任务失败 - 未在单线程单元中运行

时间:2010-10-27 17:41:01

标签: visual-studio-2010 msbuild msbuild-task

我有一个自定义的MsBuild任务,可以发送电子邮件(在发送类似电子邮件的格式内容时会做一些特殊的事情)。

背景

使用TFS 2008

构建服务器是使用TeamBuild 2008的单独计算机。

这个自定义任务以前工作正常,直到我在构建机器上安装.Net 4.0并设置构建服务以使用新版本的MSBuild(Configured Team Build 2008通过设置 MSBuildPath 属性到c:\ Windows \ Microsoft.NET \ Framework \ v4.0.21006)

我得到的错误是:

"...\TFSBuild.proj" (EndToEndIteration target) (1) -> (EmailResults target) -> ...\BuildType\TFSBuild.proj(386,5): error : SendEmailTask failed: ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the current thread is not in a single-threaded apartment.

SendEmailTask使用SmtpClient发送电子邮件。 (我怀疑SmtpClient正在使用一些底层ActiveX对象,这会引发此错误。)

如何让MsBuild在STA环境中调用自定义任务?

1 个答案:

答案 0 :(得分:2)

您的构建任务正在尝试启动Internet Explorer。是的,它需要一个STA线程,不,你不能从MSBuild.exe中获取一个

我是如何从SmtpClient到Internet Explorer的,我完全不清楚。使用HTML正文或​​某种附件听起来对我来说非常遥远。让你的构建任务启动一个完成工作的程序,至少应该给你一个更好的诊断。