2009-09-07 4 views
9

Ich habe ein Problem mit der Attrib-Aufgabe von MSBuild Community Tasks Project, wenn auf einem 64-Bit-Build-Rechner ausgeführt wird.MSBuild.Community.Tasks.Attrib auf x64-Computer schlägt fehl

Ich habe zusammen mit diesem kleinen Testprojekt setzt um zu zeigen, was das Problem ist:

<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> 

wenn ich dieses Projekt mit MSBuild mit TestAttrib als Ziel zu bauen versuchen, erhalte ich folgende Ergebnisse

C:> Msbuild "C: _Quellcode \ Test.vbproj"/t: TestAttrib Microsoft (R) Build Engine Version 3.5.30729.1 [Microsoft .NET Framework, Version 2.0.50727.4016] Copyright (C) Microsoft Corporation 2007. Alle Rechte vorbehalten.

Build gestartet 7/09/2009 2:50:12 PM.
Projekt "C: _Quellcode \ Test.vbproj" auf Knoten 0 (TestAttrib-Ziel (e)).
MSBuildCommunityTasksLib: C: \ Programme \ MSBuild \ MSBuildCommunityTasks \ MSBU ild.Community.Tasks.dll
MSBuildNodeCount: 1
MSBuildExtensionsPath: C: \ Programme \ 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: \ Programme \ MSBuild
MSBuildProjectDefaultTargets: Build
MSBuildProjectDirectory: C: _Source-Code
MSBuildProjectExtension: .vbproj
MSBuildProjectFile: Test.vbproj
MSBuildProjectFullPath: C: _Source-Code \ Test.vbproj
MSBuildProjectName : Test
MSBuildStartupDirectory: C: \
C: _Source Code \ Test.vbproj (26,5): Fehler MSB4062: Die Task "MSBuild.Community.Tasks.Attrib" konnte nicht aus der Assembly C: \ Program geladen werden Dateien \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll. Datei- oder Assembly-Datei: /// C: \ Programme \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll 'oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Die angegebene Datei wurde vom System nicht gefunden. Bestätigen Sie, dass die Deklaration korrekt ist und dass die Assembly und alle ihre Abhängigkeiten verfügbar sind. Done-Building-Projekt "C: _Quellcode \ Test.vbproj" (TestAttrib-Ziel (e)) - FAILED.

Build fehlgeschlagen.

"C: _Quellcode \ Test.vbproj" (TestAttrib Ziel) (1) -> (TestAttrib Ziel) -> C: _Source Code \ Test.vbproj (26,5): Fehler MSB4062: Die "MSBuild. Der Task "Community.Tasks.Attrib" konnte nicht von der Assembly C: \ Programme \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll geladen werden. Datei- oder Assembly-Datei: /// C: \ Programme \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll 'oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Die angegebene Datei wurde vom System nicht gefunden. Bestätigen Sie, dass die Deklaration korrekt ist und dass die Assembly und alle ihre Abhängigkeiten verfügbar sind.

0 Warning(s) 
1 Error(s) 

Verstrichene Zeit 00:00:00.05

Warum sucht die MSBuild für die Attrib Aufgabe in C: \ Programme \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll, wenn ich ausdrücklich die Aufgaben importiert haben die (MSBuildExtensionsPath32) Variable?

Antwort

7

scheine ich das Problem behoben haben durch Editierzeile 6 von "C: \ Program Files (x86) \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.Targets"
Ursprünglich wurde:

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

und ich es geändert:

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

beachten sie die Änderung von $ (MSBuildExtensionsPath) auf $ (MSBuildExtensionsPath32)

Während diese se ems, um mein Problem vorerst zu lösen, ich bin nicht sicher, warum ich die MSBuild.Community.Tasks.Targets-Datei an erster Stelle bearbeiten musste - ich nahm an, dass das Installationsprogramm sichergestellt hätte, dass die Datei korrekt war. Vielleicht ist das Bearbeiten der MSBuild.Community.Tasks.Targets-Datei nicht die beste Idee der Welt. Seien Sie also vorsichtig, wenn Sie sich entscheiden, meinem Beispiel zu folgen.

+1

genau das gleiche Problem hatte, danke! – PatrickJ

5

Dies ist offensichtlich viel zu spät eine Antwort, aber ich dachte, ich würde hinzufügen, falls jemand anderes dieses Problem hat. Anstatt die MSBuild.Community.Tasks.Targets-Datei zu bearbeiten, können Sie einfach die MSBuildCommunityTasksPath-Eigenschaft in einer Eigenschaftsgruppe in der Build-Datei definieren. Zum Beispiel habe ich so etwas wie dies an der Spitze von meinem Build-Skript:

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

Ich speichere dann die MSBuildCommunityTasks Ordner in einem Verzeichnis Tool in der Quellcodeverwaltung. Es bedeutet, dass andere Leute die Quelle herausziehen und sofort bauen können, ohne etwas zu installieren.

Cheers, Adam