我有一個自定義的MsBuild任務發送一封電子郵件(發送類似電子郵件的格式內容時做一些特殊的事情)。MSBuild任務失敗 - 沒有在單線程公寓運行
背景:
使用TFS 2008
構建服務器是使用TeamBuild一個單獨的機器2008
使用該自定義任務,直到我在構建機上安裝了.NET 4.0做工精細並設置生成服務使用新版本的MSBuild(配置Team Build 2008使用MSBuild 4.0而不是MSBuild 3.5,通過將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環境中調用自定義任務?
我發現自定義任務正在使用WebBrowser類的一個實例來做一些工作,這是導致「不在單線程公寓中運行」的原因。一旦WebBrowser類被刪除,錯誤就消失了。 (更多關於WebBrowser的信息以及它只能在STA線程中運行的事實:http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.aspx) – 2010-11-04 21:43:28