2010-10-27 85 views
0

我有一個自定義的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環境中調用自定義任務?

+0

我發現自定義任務正在使用WebBrowser類的一個實例來做一些工作,這是導致「不在單線程公寓中運行」的原因。一旦WebBrowser類被刪除,錯誤就消失了。 (更多關於WebBrowser的信息以及它只能在STA線程中運行的事實:http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.aspx) – 2010-11-04 21:43:28

回答

2

您的構建任務正試圖啓動Internet Explorer。是的,它需要一個STA線程,不,你不能得到一個MSBuild.exe

你如何從SmtpClient到Internet Explorer是完全不清楚的。使用HTML主體或某種附件聽起來對我來說都很遙遠。讓你的構建任務啓動一個完成這項工作的程序,至少應該給你一個更好的診斷。

+0

Hans,你是怎麼做到的確定任務使用IE?我懷疑你是對的。代碼試圖給包含HTML的郵件正文,這可能是爲什麼它試圖加載IE瀏覽器(不知道)。但是,爲什麼在MsBuild 3.5和MsBuild 4.0下工作 – 2010-10-31 13:30:36

+0

從錯誤信息中的Guid。我無法真正猜到MSBuild 4中發生了什麼變化。請嘗試connect.microsoft.com – 2010-10-31 13:34:20

相關問題