2009-09-07 2 views
9

64 비트 빌드 시스템에서 실행 중일 때 MSBuild Community Tasks Project에서 Attrib 태스크에 문제가 있습니다.x64 컴퓨터에서 MSBuild.Community.Tasks.Attrib가 실패합니다.

나는 문제가 무엇인지 보여주기 위해 함께이 작은 테스트 프로젝트를 넣어했습니다

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

내가 대상으로 TestAttrib를 사용하여 MSBuild에서이 프로젝트를 빌드하려고 나는 다음과 같은 결과를 얻을 수

C :> msbuild "C : _Source Code \ Test.vbproj"/ t : TestAttrib Microsoft 빌드 엔진 버전 3.5.30729.1 [Microsoft .NET Framework 버전 2.0.50727.4016] Copyright (C) Microsoft Corporation 2007 판권 소유.

빌드 시작 2009 년 7 월 9 일 2:50:12 PM.
노드 0 (TestAttrib 대상)의 "C : _Source Code \ Test.vbproj"프로젝트를 만듭니다.
MSBuildCommunityTasksLib : C : \ 프로그램 파일 \ MSBuild를 \ MSBuildCommunityTasks \ MSBu ild.Community.Tasks.dll
MSBuildNodeCount : 1
MSBuildExtensionsPath : C : \ 프로그램 파일 \ MSBuild를
MSBuildExtensionsPath32 : C : \ 프로그램 파일 (x 86)은 MSBuild \
MSBuildProjectDirectoryNoRoot : _Source 코드
MSBuildToolsPath : C : \ WINDOWS \ Microsoft.NET \ Framework64 \ V3.5
MSBuildToolsVersion : 3.5
MSBuildBinPath : C : \ WINDOWS \ Microsoft.NET \ Framework64 V3.5 \
MSBuil dExtensionsPath : C : \ 프로그램 파일 \ MSBuild를
MSBuildProjectDefaultTargets는 :
MSBuildProjectDirectory 빌드 : C : _Source 코드
MSBuildProjectExtension : Test.vbproj
MSBuildProjectFullPath : C : _Source 코드 \ Test.vbproj
MSBuildProjectName
MSBuildProjectFile의 .vbproj : 테스트
MSBuildStartupDirectory : C : \
C : _Source Code \ Test.vbproj (26,5) : 오류 MSB4062 : "MSBuild.Community.Tasks.Attrib"작업을 어셈블리 C : \ Program에서로드 할 수 없습니다. Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll. 파일 또는 어셈블리 'file : /// C : \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll'또는 해당 종속성 중 하나를로드 할 수 없습니다. 시스템이 지정된 파일을 찾을 수 없습니다. 선언이 올 바르고 어셈블리와 모든 종속성을 사용할 수 있는지 확인하십시오. 완료 빌드 프로젝트 "C : _Source Code \ Test.vbproj"(TestAttrib 대상) - FAILED.

빌드가 실패했습니다.

"C : _Source Code \ Test.vbproj"(TestAttrib 대상) (1) -> (TestAttrib 대상) -> C : _Source Code \ Test.vbproj (26,5) : 오류 MSB4062 : "MSBuild. Community.Tasks.Attrib "작업을 어셈블리 C : \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll에서로드 할 수 없습니다. 파일 또는 어셈블리 'file : /// C : \ Program Files \ MSBuild \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll'또는 해당 종속성 중 하나를로드 할 수 없습니다. 시스템이 지정된 파일을 찾을 수 없습니다. 선언이 올 바르고 어셈블리와 모든 종속성을 사용할 수 있는지 확인하십시오.

0 Warning(s) 
1 Error(s) 

시간 경과 00:00:00.05

왜 MSBuild에서이 C에서 '속성'태스크를 검색 : \ 프로그램 파일 \ MSBuild를 \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.dll 내가 명시 적으로 (MSBuildExtensionsPath32) 변수를 사용하여 작업을 가져온 경우? 원래
되었다

답변

7

나는 편집 라인 (6)에 의해 문제를 해결 한 것으로 "\ Program 파일 (x 86) \ MSBuild.Community.Tasks.Targets \ MSBuild를 \ MSBuildCommunityTasks C": 보이지

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

과 내가 그것을 변경 :

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

주 $에서 $의 변화 (MSBuildExtensionsPath) (MSBuildExtensionsPath32)

을하는 동안이 자체 내가 지금 MSBuild.Community.Tasks.Targets 파일을 편집해야하는 이유를 모르겠다. 설치 프로그램이 파일이 올바른지 확인했다고 가정했다. 그래서 아마도 MSBuild.Community.Tasks.Targets 파일을 편집하는 것이 세계에서 가장 좋은 생각이 아니므로, 당신이 내 단서를 따라 가기로 결정한다면 조심해야합니다.

+1

가 동일한 문제를 겪고, 감사합니다! – PatrickJ

5

이것은 분명히 너무 늦은 대답이지만, 다른 누구 에게든이 문제가있는 경우에 대비하여 추가 할 것이라고 생각했습니다. MSBuild.Community.Tasks.Targets 파일을 편집하는 대신 빌드 파일의 속성 그룹에 MSBuildCommunityTasksPath 속성을 정의 할 수 있습니다. 예를 들어, 내 빌드 스크립트의 상단에 이런 일이 :

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

나는 다음 소스 제어에서 도구 디렉토리에 MSBuildCommunityTasks 폴더를 저장합니다. 즉, 다른 사람들은 소스를 꺼내 아무것도 설치하지 않고 바로 빌드 할 수 있음을 의미합니다.

건배는, 아담