构建WPF应用程序时,Microsoft.Build.BuildEngine.Engine会引发错误

时间:2009-10-11 23:36:32

标签: wpf msbuild msbuild-buildengine

我正在使用Microsoft.Build.BuildEngine.Engine来构建WPF应用程序。这已成功用于类库和Web应用程序,但现在尝试使用它来构建WPF应用程序,我收到以下错误:

  

目标MarkupCompilePass1:       C:\ WINDOWS \ Microsoft.NET \框架\ v3.5版本\ Microsoft.WinFX.targets(294,9):   错误MC1000:未知的生成错误,   'API限制:程序集   'file:/// C:\ Program Files   (86)\参考   大会\微软\框架\ 3.0 \ PresentationCore.dll中”   已经从另一个加载   地点。它不能从一个加载   新的位置在同一个   应用程序域“。完成建筑目标   项目中的“MarkupCompilePass1”   “TestWindowsApplication.csproj” -   失败。

此应用程序在使用VisualStudio 2008构建时构建正常(即从菜单构建),但使用Microsoft.Build.BuildEngine.Engine会抛出此构建错误。有人知道这里发生了什么吗?

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,并在msdn上发现了this,其中包含

  

默认情况下,标记编译运行于   与MSBuild相同的AppDomain   发动机。这为我们提供了重要   业绩增长。这种行为可以   与...交谈   AlwaysCompileMarkupFilesInSeparateDomain   属性。后者有   卸载所有参考的优点   通过卸载单独的组件   应用程序域。

因为抛出异常表明PresentationCore已加载到同一AppDomain中,我使用以下方法切换了此属性:

projectToBuild.SetProperty("AlwaysCompileMarkupFilesInSeparateDomain", "True");

这似乎是关键。

我希望这会有所帮助。

答案 1 :(得分:2)

现在这很有趣!查看我上周点击的this issue。相同的异常和错误消息,与WPF相关。

如果您查看抛出异常的MSBuild MarkupCompilePass1任务的注释,可能是为什么它在VS2008内部工作而不是从MSBuild进程中工作的线索:

<!--
When performing an intellisense compile, we don't want to abort the compile if 
MarkupCompilePass1 fails.  This would prevent the list of files from being handed 
off to the compiler, thereby breaking all intellisense.  For intellisense compiles
we set ContinueOnError to true.  The property defined here is used as the value
for ContinueOnError on the MarkupCompilePass1 task.
-->