2013-10-01 3 views
2

MSBuild 프로젝트를 통해 호출되는 사용자 지정 (인라인 또는 비 인라인) 작업 내에서 다른 MSBuild 작업 (CL, 링크, 삭제, MakeDir 등)을 호출 할 수 있습니까? 파일? 뭔가 같이 : 사용자 지정 작업 내에서 MSBuild 작업 호출

<!-- In MSBuild File --> 
<MyStrangeTask /> 

그리고 C# 코드에서

는 "MyStrangeTask"

// After declaring class, properties, etc. 
public override bool Execute() 
{ 
    // Call other MSBuild Tasks here: CL, Link, MakeDir, etc. 
} 

예를 구현, 왜 재 작업 (등 MakeDir을, 삭제)하지만, 일부의 기능을 복제 할 수있을 - 바퀴를 끄지? 게다가 CL 및 Link와 같은 작업은 다시 구현하는 데 많은 시간이 소요됩니다.

왜 내가 필요한가?

기본적으로 파일 복사, CL 전처리 기 등의 호출이 필요한 커스텀 작업을 작성하고 있습니다. "거대한"태스크의 디자인에 의문을 제기 할 수도 있지만, 일부 요구 사항으로 인해 " 지루한 "경로.


는 편집 : 이 질문에

이 질문은 디자인에서하지의 정확한 상황이지만 기술적 인 관점을 강조합니다.

이 분야의 초심자이기 때문에 기술적으로 가능한지 알고 싶습니다. 그렇다면 어떻게? 그렇지 않다면, 왜 안 되니?

+1

논리 파트에서 사용자 지정 작업을 분할하면 필요하지 않습니다. 예를 들어 Copy를 사용하여 파일을 먼저 복사 한 msbuild 대상을 만든 다음 CL, Link, MakeDir 등을 호출합니다. – stijn

+0

상대 크기와 질량의 다른 객체와 나란히 놓으면 객체를 "회전" "축"을 따라서 마찰을 감소시킨다. 우리는 이것을 "바퀴"라고 부르며 네 구석으로 이것을 디자인 할 것입니다. – Nicodemeus

+0

하하하 .. :) 네, (제 질문에서 언급했듯이) 좋은 디자인이 아니지만 다시 인용해야한다는 사실을 이해합니다. "_let은 단지 일부 요구 사항으로 인해 우리가"지루한 "경로를 걷도록 강요합니다." –

답변

2

우선 MSBuild 작업에 사용되는 클래스는 MSDN에서 찾을 수 있습니다. 하지만 당신은 명시 적으로 쓰여 있음을 유의하십시오 :

이 API는 .NET Framework 인프라를 지원하며 는 당신이 그런 예를 찾을 수 있습니다 또한

사용자 코드에서 직접 사용할 수 없습니다 이 blog post에서의 사용.

당신이 물어 본 것에 대한 답변이지만 필요한 다른 해결책이 있습니다. 많은 하위 작업에서 작업을 제동 할 수 있습니다 : 첫 번째 사용자 지정 작업의 출력이 내장 된 시스템에서 사용할 수있는 MSBuild 프로젝트로 전송됩니다. 작업 및 출력에 내장 된 작업의 두 번째 사용자 지정 작업에 등등 보내집니다.

+0

예, 포인터를 주셔서 감사합니다. 나는 CL Task (Microsoft.Build.CPPTasks.CL) 클래스를 검색하고 발견했습니다. 내 코드에서 직접 사용할 생각은 없습니다. 호기심으로 질문이 제기되었습니다. –

+0

링크가 끊어지는 경우를 대비해 http://web.archive.org/web/20161024064310/http://codefocus.blogspot.com.au/2008/10/running-msbuild-tasks-programatically.html – reduckted