views:

20

answers:

1

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) -> ...\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.

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?

+2  A: 

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.

Hans Passant
Hans, how did you determine that the task is using IE? And I suspect you are right. The code is trying to email body that contains HTML and that is probably why its trying to load IE (not sure though). But why did this work under MsBuild 3.5 and not MsBuild 4.0
Rajah
From the Guid in the error message. I can't really guess what changed in MSBuild 4. Try connect.microsoft.com
Hans Passant