Thursday, August 27, 2009

VSTS Team Build Failure when using click-once

As I arrived at work today, I found a build FAILED report in my inbox. Not the best way to start a working day...
Looking at the build report I saw following error:
c:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(1805,7): error MSB4018: The "ResolveKeySource" task failed unexpectedly.
System.InvalidOperationException: Showing a modal dialog box or form when the application is not running in UserInteractive mode is not a valid operation. Specify the ServiceNotification or DefaultDesktopOnly style to display a notification from a service application.
at System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
at System.Windows.Forms.Form.ShowDialog()
at Microsoft.Build.Tasks.ResolveKeySource.ResolveManifestKey()
at Microsoft.Build.Tasks.ResolveKeySource.Execute()
at Microsoft.Build.BuildEngine.TaskEngine.ExecuteInstantiatedTask(EngineProxy engineProxy, ItemBucket bucket, TaskExecutionMode howToExecuteTask, ITask task, Boolean& taskResult)

After some digging into the issue, I found out that the failure was caused by a certificate we were using to sign our click-once assemblies. This certificate is protected by a key. The first time you trigger a build, you'll be prompted with the question to provide the key. Because Team Build is triggered in a non-UI fashion, an error happens when MSBuild tries to popup a window.
The easiest way to solve this is:
- Logon to the build machine using the build service account
- Run msbuild on any project that uses this signing key. It will prompt for the password and will export the key.
- Now start the TeamBuild full build.
That's all!

No comments: