I have a custom MsBuild task that sends an email (does some special stuff while sending the email -like formatting content).
Background:
Using TFS 2008
Build server is a separate machine using TeamBuild 2008.
This custom task used to work fine until I installed .Net 4.0 on the build machine and setup the build service to use the new version of MSBuild (Configured Team Build 2008 to use MSBuild 4.0 instead of MSBuild 3.5 by setting the MSBuildPath property to c:\Windows\Microsoft.NET\Framework\v4.0.21006)
The error that I get is:
"...\TFSBuild.proj" (EndToEndIteration target) (1) -> (EmailResults target) -> ...\Buil开发者_StackOverflow社区dType\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.
The SendEmailTask
uses SmtpClient
to send an email. (my suspicion is that the SmtpClient
is using some underlying ActiveX object which is throwing this error).
How do I get MsBuild to invoke the custom task in a STA environment?
Your build task is trying to start Internet Explorer. Yes, it needs an STA thread, and no, you can't get one out of MSBuild.exe
How you got from SmtpClient to Internet Explorer is completely unclear to me. Using an HTML body or some kind an attachment sounds all pretty remote to me. Having your build task start a program that does the job instead at least ought to give you a better diagnostic.
精彩评论