2009-10-11 4 views
2

J'utilise Microsoft.Build.BuildEngine.Engine pour créer une application WPF. Cela a travaillé avec succès pour les bibliothèques de classe et des applications Web, mais maintenant essayer de l'utiliser pour construire une application WPF Je reçois l'erreur suivante:Microsoft.Build.BuildEngine.Engine génère une erreur lors de la création de l'application WPF

Target MarkupCompilePass1: c:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.WinFX.targets(294,9): error MC1000: Unknown build error, 'API restriction: The assembly 'file:///C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore.dll' has already loaded from a different location. It cannot be loaded from a new location within the same appdomain.' Done building target "MarkupCompilePass1" in project "TestWindowsApplication.csproj" -- FAILED.

Cette application se construit bien lors de la construction à l'aide VisualStudio 2008 (c.-à-construire à partir de le menu), mais en utilisant le Microsoft.Build.BuildEngine.Engine il jette cette erreur de construction. Quelqu'un sait ce qui se passe ici?

Répondre

3

J'ai eu la même problème et trouvé this sur msdn qui dit

By default, markup compilation runs in the same AppDomain as the MSBuild engine. This provides us significant performance gains. This behavior can be toggled with the AlwaysCompileMarkupFilesInSeparateDomain property. The latter one has the advantage of unloading all reference assemblies by unloading the separate AppDomain.

Ainsi, depuis l'exception jetée a déclaré que PresentationCore a été chargé dans le même AppDomain je mis cette propriété à l'aide:

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

Ce qui semblait être la clé.

J'espère que cela aide.

2

Maintenant, c'est intéressant! Départ this issue J'ai frappé la semaine dernière. Même exception et message d'erreur, et liés à WPF.

Si vous regardez les commentaires pour la tâche MSBuild MarkupCompilePass1 lancer l'exception, il est peut-être un indice quant à la raison pour laquelle il travaille à l'intérieur VS2008, mais pas de votre processus 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. 
--> 
+0

Cela semble avoir fonctionné! Merci beaucoup. Toute idée sur la raison pour laquelle MarkupCompilePass1 échouerait comme ça? Je me sens juste un peu comme une solution de rechange plutôt qu'une solution pour moi, ce serait génial de compiler correctement cela aussi. Merci encore pour votre aide! – ChrisHDog

+0

Acceptez que ce soit un kludge. Désolé, je ne connais pas la raison pour laquelle cela se produit, mais je vais lier votre question à ma question, donc si quelqu'un découvre que nous le saurons tous les deux :) – si618

+0

J'ai maintenant le comportement intéressant de ne pas travailler dans tous cas (je l'ai eu fonctionnant pour une application wpf, mais maintenant pour une deuxième application wpf) ... J'ai l'ensemble ContinueOnError à vrai, mais le MarkupCompilePass1 toujours FAILD, puis puis la construction échoue ... – ChrisHDog

Questions connexes