Сбой задачи MSBuild - не работает в однопоточной квартире - PullRequest
0 голосов
/ 27 октября 2010

У меня есть пользовательская задача 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?

1 Ответ

2 голосов
/ 27 октября 2010

Ваша задача сборки пытается запустить Internet Explorer.Да, ему нужен поток STA, и нет, вы не можете получить его из MSBuild.exe

Как вы перешли из SmtpClient в Internet Explorer, мне совершенно неясно.Использование HTML-тела или какого-то другого приложения звучит для меня довольно отдаленно.Когда ваша задача сборки запустится, программа, которая выполняет эту работу, по крайней мере, должна дать вам лучшую диагностику.

...