2016-07-20 2 views
1

J'ai mis à jour la référence d'assembly dans mon outil de compilation pour utiliser les dernières versions (v12) de microsoft.build, microsoft.build.engine et microsoft.build.framework. Mais lors de la compilation d'un projet en utilisant BuildManager (j'utilise l'option Reconstruire pour la compilation) il échoue à la cible: CleanWebsitesPackageCore avec l'erreur MSB4127: "La tâche" CheckPathAttributes "n'a pas pu être instanciée depuis l'assembly" C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll ". Veuillez vérifier que l'assembly de tâche a été créé en utilisant la même version de l'assembly Microsoft.Build.Framework que celui installé sur votre ordinateur et que votre application hôte ne manque pas de redirection de liaison pour Microsoft.Build.Framework Impossible de convertir l'objet de type 'Microsoft.Web.Publishing.Tasks.CheckPathAttributes' en type 'Microsoft.Build.Framework.ITask' ".Échec de construction lors de l'utilisation de buildManager avec la dernière version de microsoft.build.dll, v12.0.0.0

Le point intéressant à noter est que si j'essaie de compiler le projet directement en appelant MSBuild.exe à partir de l'invite de commande, il compile bien. En regardant les journaux, j'ai pu voir que la cible "CleanWebsitesPackageCore" n'était jamais appelée pendant la partie "clean". Je me demande pourquoi la cible est appelée lors de l'utilisation de buildmanager et non lors de l'appel de msbuild.exe directement à l'invite de commande?

Tout le monde a une idée de ce qui se passe comme ça. Merci d'avance.

+0

Trop de versions de MSBuild autour. L'erreur de distribution indique que vous référencez la mauvaise version de Microsoft.Build.Framework. Sur ma machine c'est la version 14 et stockée dans le GAC. –

+0

J'ai référencé microsoft.build, microsoft.build.engine et microsoft.build.framework de c: \ Program Files (x86) \ MSBuild \ 12.0 \ bin. Donc, dans ce cas, ne devrait-il pas être compilé avec MSBuild sous 12.0? – Deepu

+0

C'est la version 12, pas la version 14, donc ça ne marcherait pas sur ma machine. Probablement pas le vôtre non plus, étant donné le résultat. Regardez le fichier MSBuild.exe.config que vous utilisez, il a un * lot * d'éléments bindingRedirect pour traiter ces problèmes de numéro de version. Votre fichier app.config ne les possède pas, il en a également besoin. –

Répondre

3

Solution de référence: http://blogs.microsoft.co.il/idof/2008/11/24/what-does-entity-framework-has-to-do-with-msbuild/

App.config ajouter cette dependentAssembly

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Build.Framework"   publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> 
     <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="12.0.0.0"/> 
    </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
+0

Merci Erkan .. ça a marché après ça – Deepu