2017-01-18 3 views

답변

1

작업은 Task class을 구현하며 msbuild 코드에서 호출 할 수 있습니다. 보통 이것은 예를 들어 클래스를 구현하는 C# 코드를 작성하고이를 UsingTask 요소에 전달 된 dll로 빌드하여 사용 가능하게 만듭니다. 이렇게하는 더 짧은 방법이 있습니다 : Inline Tasks을 사용하십시오. 이렇게하면 msbuild 파일에 코드 directlry를 쓸 수 있습니다.

엄밀히 말하자면 Task에는 위의 정의가 있고 msbuild에있는 속성과 정확히 같은 것이 하나뿐이므로 대안이 없습니다. 또한 Target이 있지만 Tasks를 호출하는 데 사용됩니다 (다른 대상과의 종속성 표현, 입력/출력 정의 등). 따라서 일부 중복을 고려하면 대안입니다. 나는 이것이 당신이 요구하는 것이라고 가정합니다 : 대상에서 여러 작업을 연속적으로 호출하거나 다른 대상에 종속되는 대상을 갖는 기능을 만들거나 자신의 작업 중 일부 또는 전부를 수행하는 작업.

예제 : 디렉터리를 나열하고 모든 .c 파일을 다른 디렉터리로 복사 한 다음 디렉터리를 압축한다고 가정합니다. ItemGroup을 사용하여 파일을 나열하는 대상을 작성한 다음 복사 및 우편 작업을 호출하십시오. 또는 Directory.GetFiles/File.Copy/ZipFile.CreateDirectory와 같은 C# 호출을 사용하는 사용자 지정 작업을 작성하고 대상에 사용자 지정 작업 만 호출하도록 할 수 있습니다.

사용자 지정 작업의 장점 : 그들은 임의의 코드를 포함 할 수 있으므로 기본적으로 을 수행 할 수 있습니다.을 상상해보십시오. 단점 : dbu 또는 소스 코드로 msbuild 코드를 사용하여 빌드, 유지 관리 및 배송해야합니다.이 경우 소스 코드를 사용하기 전에 즉석에서 빌드해야합니다.

기존 (내장) 작업이있는 대상의 장점 : 빌드 시스템에서 볼 수있는 가장 일반적인 기능은 풍부한 자료 및 추가 질문으로 SO 질문에 쉽게 사용할 수 있습니다. 그 코드는 이미 존재하며, 커스텀 코드의 관리가 없다. 단점 : 모든 기능을 사용할 수있는 것은 아니며, 기능을 달성하기 위해 구성된 작업 수가 너무 많거나 비실용적 일 수 있습니다.

작업을 사용하는시기는 기본적으로 위의 두 단락에 의해 응답됩니다. 나는 당신의 유스 케이스를 모르기 때문에 당신이 실제로 쓰는 커스텀 태스크의 양을 말할 수 없습니다. 모든 msbuild 코드를 보면 (C/C++/C#/Python 프로젝트의 혼합을 다루기 위해) 95 % 내장 태스크와 5 % 사용자 정의 태스크라고합니다. 그 중 5 %는 다른 사람들이 작성한 작업의 대부분입니다. ike MSBuild Community TasksMSBuild Extension Pack.