2009-09-07 11 views
9

Je rencontre un problème avec la tâche Attrib du MSBuild Community Tasks Project lors de l'exécution sur un ordinateur de génération 64 bits.MSBuild.Community.Tasks.Attrib sur l'ordinateur x64 en panne

J'ai mis en place ce petit projet de test pour montrer quel est le problème:

<Project ToolsVersion="3.5" DefaultTargets="Build" 
     xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <Import Project="$(MSBuildExtensionsPath32)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/> 

    <Target Name="PrintProperties"> 
    <Message Text="MSBuildCommunityTasksPath: $(MSBuildCommunityTasksPath)"/> 
    <Message Text="MSBuildCommunityTasksLib: $(MSBuildCommunityTasksLib)"/> 
    <Message Text="MSBuildNodeCount: $(MSBuildNodeCount)"/> 
    <Message Text="MSBuildExtensionsPath: $(MSBuildExtensionsPath)"/> 
    <Message Text="MSBuildExtensionsPath32: $(MSBuildExtensionsPath32)"/> 
    <Message Text="MSBuildProjectDirectoryNoRoot: $(MSBuildProjectDirectoryNoRoot)"/> 
    <Message Text="MSBuildToolsPath: $(MSBuildToolsPath)"/> 
    <Message Text="MSBuildToolsVersion: $(MSBuildToolsVersion)"/> 
    <Message Text="MSBuildBinPath: $(MSBuildBinPath)"/> 
    <Message Text="MSBuildExtensionsPath: $(MSBuildExtensionsPath)"/> 
    <Message Text="MSBuildProjectDefaultTargets: $(MSBuildProjectDefaultTargets)"/> 
    <Message Text="MSBuildProjectDirectory: $(MSBuildProjectDirectory)"/> 
    <Message Text="MSBuildProjectExtension: $(MSBuildProjectExtension)"/> 
    <Message Text="MSBuildProjectFile: $(MSBuildProjectFile)"/> 
    <Message Text="MSBuildProjectFullPath: $(MSBuildProjectFullPath)"/> 
    <Message Text="MSBuildProjectName: $(MSBuildProjectName)"/> 
    <Message Text="MSBuildStartupDirectory: $(MSBuildStartupDirectory)"/> 
    </Target> 

    <Target Name="TestAttrib" DependsOnTargets="PrintProperties"> 
    <Attrib Files="Test.txt" ReadOnly="false" /> 
    </Target> 

</Project> 

lorsque je tente de construire ce projet avec MSBuild en utilisant TestAttrib comme cible j'obtenir les résultats suivants

C:> msbuild «C: _Source Code \ Test.vbproj»/t: TestAttrib Microsoft (R) Build Engine Version 3.5.30729.1 [Microsoft .NET Framework, Version 2.0.50727.4016] Droits d'auteur (C) Microsoft Corporation 2007. Tous les droits sont réservés.

La construction a démarré le 7/09/2009 2:50:12 PM.
Projet "C: _Source Code \ Test.vbproj" sur le noeud 0 (cible (s) TestAttrib).
MSBuildCommunityTasksLib: C: \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBu ild.Community.Tasks.dll
MSBuildNodeCount: 1
MSBuildExtensionsPath: C: \ Program Files \ MSBuild
MSBuildExtensionsPath32: C: \ Program Files (x86) \ MSBuild
MSBuildProjectDirectoryNoRoot: _Source code
MSBuildToolsPath: c: \ Windows \ Microsoft.NET \ Framework64 \ v3.5
MSBuildToolsVersion: 3,5
MSBuildBinPath: c: \ Windows \ Microsoft.NET \ Framework64 \ v3.5
MSBuil dExtensionsPath: C: \ Program Files \ MSBuild
MSBuildProjectDefaultTargets: Construire
MSBuildProjectDirectory: C: _Source code
MSBuildProjectExtension: .vbproj
MSBuildProjectFile: Test.vbproj
MSBuildProjectFullPath: C: Code _Source \ Test.vbproj
MSBuildProjectName : Test
MSBuildStartupDirectory: C: \
C: _Source Code \ Test.vbproj (26,5): erreur MSB4062: La tâche "MSBuild.Community.Tasks.Attrib" n'a pas pu être chargée à partir de l'assembly C: \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll. Impossible de charger le fichier ou l'assemblage 'file: /// C: \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll' ou l'une de ses dépendances. Le système ne peut pas trouver le fichier spécifié. Confirmez que la déclaration est correcte et que l'assembly et toutes ses dépendances sont disponibles. Terminé Projet de construction "C: _Source Code \ Test.vbproj" (TestAttrib cible (s)) - ÉCHEC.

Échec de construction. "C: _Source Code \ Test.vbproj" (TestAttrib target) (1) -> (Cible TestAttrib) -> C: _Source Code \ Test.vbproj (26,5): erreur MSB4062: "MSBuild. La tâche Community.Tasks.Attrib "n'a pas pu être chargée depuis l'assembly C: \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll. Impossible de charger le fichier ou l'assemblage 'file: /// C: \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll' ou l'une de ses dépendances. Le système ne peut pas trouver le fichier spécifié. Confirmez que la déclaration est correcte et que l'assembly et toutes ses dépendances sont disponibles.

0 Warning(s) 
1 Error(s) 

Durée écoulée 00:00:00.05

Pourquoi MSBuild recherche-t-il la tâche Attrib dans C: \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll lorsque j'ai explicitement importé les tâches à l'aide de la variable (MSBuildExtensionsPath32)?

Répondre

7

Il me semble avoir résolu le problème par la ligne d'édition 6 de "C: \ Program Files (x86) \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.Targets"
l'origine, il a été:

<MSBuildCommunityTasksPath Condition="'$(MSBuildCommunityTasksPath)' == ''">$(MSBuildExtensionsPath)\MSBuildCommunityTasks</MSBuildCommunityTasksPath> 

et je modifié à:

<MSBuildCommunityTasksPath Condition="'$(MSBuildCommunityTasksPath)' == ''">$(MSBuildExtensionsPath32)\MSBuildCommunityTasks</MSBuildCommunityTasksPath> 

noter le changement de

$ (MSBuildExtensionsPath) à $ (MSBuildExtensionsPath32) Bien que cela se ems a réglé mon problème pour le moment, je ne sais pas pourquoi j'ai dû éditer le fichier MSBuild.Community.Tasks.Targets en premier lieu - j'ai supposé que l'installateur aurait vérifié que le fichier était correct. Alors peut-être que l'édition du fichier MSBuild.Community.Tasks.Targets n'est pas la meilleure idée au monde, alors faites attention si vous décidez de suivre mon exemple.

+1

a eu le même problème, je vous remercie! – PatrickJ

5

Cette réponse est manifestement trop tardive, mais j'ai pensé que j'ajouterais au cas où quelqu'un d'autre aurait ce problème. Au lieu de modifier le fichier MSBuild.Community.Tasks.Targets, vous pouvez simplement définir la propriété MSBuildCommunityTasksPath dans un groupe de propriétés dans votre fichier de construction. Par exemple, j'ai quelque chose comme ça en haut de mon script de construction:

<PropertyGroup> 
    <ToolsDirectory>$(MSBuildProjectDirectory)\tools</ToolsDirectory> 
    <MSBuildCommunityTasksPath>$(ToolsDirectory)\MSBuildCommunityTasks</MSBuildCommunityTasksPath> 
</PropertyGroup> 

je puis stocker le dossier MSBuildCommunityTasks dans un répertoire d'outils de contrôle de code source. Cela signifie que d'autres personnes peuvent retirer la source et la construire immédiatement sans rien installer.

Cheers, Adam