2

Microsoft.Build.BuildEngine.Engine を使用して WPF アプリケーションをビルドしています。これは、クラス ライブラリと Web アプリケーションでは正常に機能していますが、WPF アプリケーションをビルドするために使用しようとすると、次のエラーが発生します。

ターゲット MarkupCompilePass1: c:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.WinFX.targets(294,9): エラー MC1000: 不明なビルド エラー、'API 制限: アセンブリ'file:///C: \Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore.dll' は、別の場所から既に読み込まれています。同じ appdomain 内の新しい場所から読み込むことはできません。プロジェクト「TestWindowsApplication.csproj」でターゲット「MarkupCompilePass1」のビルドを完了 -- 失敗。

このアプリケーションは、VisualStudio 2008 を使用してビルドする (つまり、メニューからビルドする) 場合は正常にビルドされますが、Microsoft.Build.BuildEngine.Engine を使用すると、このビルド エラーがスローされます。ここで何が起こっているか知っている人はいますか?

4

2 に答える 2

3

私は同じ問題を抱えていて、msdnでこれを見つけました。

デフォルトでは、マークアップコンパイルはMSBuildエンジンと同じAppDomainで実行されます。これにより、パフォーマンスが大幅に向上します。この動作は、AlwaysCompileMarkupFilesInSeparateDomainプロパティで切り替えることができます。後者には、個別のAppDomainをアンロードすることにより、すべての参照アセンブリをアンロードするという利点があります。

スローされた例外は、PresentationCoreが同じAppDomainにロードされたことを示しているため、次を使用してこのプロパティを切り替えました。

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

これが鍵のようでした。

これがお役に立てば幸いです。

于 2009-10-15T04:17:11.390 に答える
2

今それは面白いです!先週ヒットしたこの問題をチェックしてください。同じ例外とエラー メッセージで、WPF に関連しています。

例外をスローする MSBuild タスクのコメントを見ると、MarkupCompilePass1MSBuild プロセスからではなく VS2008 内で動作している理由の手がかりになる可能性があります。

<!--
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.
-->
于 2009-10-11T23:51:39.113 に答える