2012-05-06 2 views
5

MSBuild에서 사용자 정의 태스크 내에서 현재 프로젝트 컨텍스트에 어떻게 액세스합니까? 처음에는 ProjectCollection에있는 GlobalProjectCollection 참조가 액세스를 허용하는 것처럼 보였지만 적어도 명령 줄에서 MSBuild를 실행할 때는 비어있는 것처럼 보입니다.사용자 정의 작업 내에서 현재 프로젝트 컨텍스트에 어떻게 액세스합니까?

List projectAssemblies = new List(); 
using (XmlReader projectFileReader = 
    XmlReader.Create(this.BuildEngine.ProjectFileOfTaskNode)) 
{ 
    Project project = new Project(projectFileReader); 
    foreach (ProjectItem item in project.AllEvaluatedItems) 
    { 
     ... woo hoo ... 
    } 
} 

을하지만, 그것은 단지 문제가 많은 것 같아 :

저는 현재 다음과 같은 방법으로 현재 프로젝트 파일을 기반으로 새 프로젝트 인스턴스를 얻을 수 있습니다. 내 작업이 호출 된 프로젝트에 대한 액세스 권한을 얻으려면 어떻게해야합니까?

답변

5

수 없습니다. MSBuild는 개별 작업이 명시 적으로 작업에 전달한 매개 변수에만 액세스 할 수 있도록 특별히 설계되었습니다. 이렇게하면 MSBuild 파일을 더 쉽게 읽을 수 있습니다. 이제는 각 작업이이 작업을 호출 할 때 지정한 내용의 영향을받습니다.

코드는 프로젝트의 복사본을 만들지 않고 새로운 인스턴스를 생성하므로 동일한 속성을 기대해서는 안됩니다. 예를 들어, 현재 실행중인 프로젝트의 인스턴스 (작업이 호출 된 곳)는 명령 행에서 오버라이드되거나 프로젝트가 빌드되는 방식에 따라 변경 될 수 있습니다. 새로 생성 된 프로젝트는 처음에 속성의 기본값을 갖습니다 MSBuild 엔진이 파일을 통과합니다.

+1

정확합니다. 작업에도 내부에서 일부 상위 개체를 참조하는 대신 전달 된 컨테이너 프로젝트의 참조가 있습니다. 이것이 내가 현재 참조하려고하는 것이므로,이 핵심 작업과 비슷한 방식으로 참조를 유도 할 것입니다. – bojolais

+0

글로벌 속성은 어떻습니까? 작업 내에서 액세스 할 수 있습니까? – Irek

관련 문제