2009-09-07 15 views
9

Mam problem z zadaniem Attrib z MSBuild Community Tasks Project podczas uruchamiania na maszynie 64-bitowej kompilacji.MSBuild.Community.Tasks.Attrib na maszynie x64 zawodzi

I już ułożyła ten mały projekt testowy, aby pokazać na czym polega problem:

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

gdy próbuję zbudować ten projekt z MSBuild korzystając TestAttrib jako cel uzyskać następujące wyniki

C:> msbuild "C: _ Kod źródłowy \ Test.vbproj"/t: TestAttrib Microsoft (R) Build Engine Wersja 3.5.30729.1 [Microsoft .NET Framework, wersja 2.0.50727.4016] Prawa autorskie (C) Microsoft Corporation 2007. Wszelkie prawa zastrzeżone.

Rozpoczęcie budowy 7/09/2009 14:50:12 PM.
Projekt "C: _ Kod źródłowy \ Test.vbproj" na węźle 0 (Cel (e) 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: Kod _Source
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: Budowanie
MSBuildProjectDirectory: C: Kod _Source
MSBuildProjectExtension: .vbproj
MSBuildProjectFile: Test.vbproj
MSBuildProjectFullPath: C: Kod _Source \ Test.vbproj
MSBuildProjectName : Test
MSBuildStartupDirectory: C: \
C: _ Kod źródłowy \ Test.vbproj (26,5): błąd MSB4062: Nie można załadować zadania "MSBuild.Community.Tasks.Attrib" z zespołu C: \ Program Pliki \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll. Nie można załadować pliku lub zespołu "file: /// C: \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll" lub jednej z jego zależności. System nie może odnaleźć określonego pliku. Potwierdź, że deklaracja jest poprawna oraz że zespół i wszystkie jego zależności są dostępne. Wykonano projekt budowlany "C: _Source Code \ Test.vbproj" (Cel (e) TestAttrib) - NIE POWIODŁO SIĘ.

Build FAILED.

"C: _ Kod źródłowy \ Test.vbproj" (Cel TestAttrib) (1) -> (Cel TestAttrib) -> C: _ Kod źródłowy \ Test.vbproj (26,5): błąd MSB4062: "MSBuild. Community.Tasks.Attrib "zadanie nie mogło zostać załadowane z zestawu C: \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll. Nie można załadować pliku lub zespołu "file: /// C: \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll" lub jednej z jego zależności. System nie może odnaleźć określonego pliku. Potwierdź, że deklaracja jest poprawna oraz że zespół i wszystkie jego zależności są dostępne.

0 Warning(s) 
1 Error(s) 

Czas, który upłynął 00:00:00.05

Dlaczego MSBuild wyszukuje zadanie Attrib w C: \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll, gdy jednoznacznie zaimportowałem zadania przy użyciu zmiennej (MSBuildExtensionsPath32)?

Odpowiedz

7

I wydaje się, że stała się kwestią edytując linii 6 "C: Program Files \ (x86) \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.Targets"
Początkowo było:

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

i zmienił go do:

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

nocie zmianę $ (MSBuildExtensionsPath) do $ (MSBuildExtensionsPath32)

Mimo to se ems, aby rozwiązać mój problem na razie, nie jestem pewien, dlaczego musiałem edytować plik MSBuild.Community.Tasks.Targets w pierwszej kolejności - założyłem, że instalator upewniłby się, że plik jest poprawny. Być może więc edycja pliku MSBuild.Community.Tasks.Targets nie jest najlepszym pomysłem na świecie, więc bądź ostrożny, jeśli zdecydujesz się podążać za moim tropem.

+1

Miałem dokładnie ten sam problem, dziękuję! – PatrickJ

5

Jest to zdecydowanie za spóźniona odpowiedź, ale pomyślałem, że dodam do tego na wypadek, gdyby ktoś inny miał ten problem. Zamiast edytować plik MSBuild.Community.Tasks.Targets, można po prostu zdefiniować właściwość MSBuildCommunityTasksPath w grupie właściwości w pliku kompilacji. Na przykład, mam coś takiego na szczycie mojego skryptu build:

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

I następnie zapisać folder MSBuildCommunityTasks w katalogu Narzędzia w kontroli źródła. Oznacza to, że inni ludzie mogą wyciągnąć źródło i zbudować je od razu bez instalowania czegokolwiek.

Cheers, Adam