Compile Apps Your Way With Custom Tasks For The Microsoft Build Engine Inside MSBuild Compile Apps Your Way With Custom Tasks For The Microsoft Build Engine
MSBuild 개요 MS의 새로운 빌드 플랫폼 Visual Studio가 설치되어 있지 않아도 빌드가능 프로젝트 파일 항목 (Item) 속성 (Property) 작업 (Task) 대상 (Target) 로깅 (Logging)
항목 (Item) <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <Stuff Include=“*.cs" Exclude = “One.cs”> <Display>false</Display> </Stuff> <Stuff Include="Two.cs"> <Display>true</Display> </ItemGroup> <Target Name="Batching"> <Message Text="@(Stuff)" Condition=" '%(Display)' == 'true' "/> </Target> </Project>
항목 (Item) 빌드 시스템에 대한 입력 항목 컬렉션으로 그룹화 빌드 프로세스의 단계를 수행하는 작업의 매개 변수 ItemGroup 노드의 자식노드 와일드 카드 사용 (**, * , ?) Ex) Include="Images\\**\*.jpg" - Images 폴더부터 모든 하위 폴더 에서 확장자가 jpg인 파일만 찾는다. Exclude 특성 사용 항목 참조 : @(ItemCollectionName) Ex) @(Stuff) 항목 메타데이타 Ex) <Display>false</Display> 항목 메타데이타 참조 : %(ItemMetadataName) or %(ItemCollectionName.ItemMetaDataName)
항목 (Item) 항목 메타데이터 설명 %(FullPath) 항목의 전체 경로를 포함합니다. C:\MyProject\Source\Program.cs %(RootDir) 항목의 루트 디렉터리를 포함합니다. C:\ %(Filename) 확장명을 제외한 항목의 파일 이름을 포함합니다. %(Extension) 항목의 파일 이름 확장명을 포함합니다. .cs %(RelativeDir) 현재 작업 디렉터리에 상대적인 디렉터리 경로를 포함합니다. Source\ %(Directory) 항목의 루트 디렉터리를 제외한 디렉터리를 포함합니다. MyProject\Source\ %(RecursiveDir) Include 특성에 와일드카드 **가 있는 경우 이 메타데이터는 와일드카드를 대체한 디렉터리를 지정하여 항목을 찾습니다. <ItemGroup> <MyItem Include="C:\**\Program.cs" /> </ItemGroup> %(Identity) Include 특성에 지정된 항목입니다. 예를 들면 다음과 같습니다. Source\Program.cs %(ModifiedTime) 항목이 마지막으로 수정된 시간의 타임스탬프를 포함합니다. 2004-07-01 00:21:31.5073316 %(CreatedTime) 항목이 만들어진 시간의 타임스탬프를 포함합니다. 2004-06-25 09:26:45.8237425 %(AccessedTime) 시간이 마지막으로 액세스된 시간의 타임스탬프를 포함합니다. 2004-08-14 16:52:36.3168743
속성 (Property) <Project DefaultTargets = "Compile"> <ItemGroup> <CSFile Include = "consolehwcs1.cs"/> </ItemGroup> <PropertyGroup> <OutputType>WinExe</OutputType> <AppDesignerFolder>Properties</AppDesignerFolder> <RootNamespace>Framework.Tools.ErWinParser</RootNamespace> <AssemblyName>Framework.Tools.ErWinParser</AssemblyName> </PropertyGroup> <Target Name = "Compile"> <CSC Sources = "@(CSFile)" OutputAssembly = "$(MSBuildProjectName).exe" > <!-- Set the OutputAssembly attribute of the CSC task to the name of the project --> <Output TaskParameter = "OutputAssembly" ItemName = "EXEFile" /> </CSC> <!-- Log the file name of the output file --> <Message Text="The output file is @(EXEFile)"/> </Target> </Project>
속성 (Property) 키 / 값 쌍으로 이루어 진다. 항목은 컬렉션에 저장 되지만 속성은 단일 스칼라 값을 포함한다. 메타데이타를 포함하지 않는다. PropertyGroup 노드의 자식노드 속성참조 : $(PropertyName) 명령줄 /property or /p
속성 (Property) 예약 속성 설명 MSBuildProjectDirectory 프로젝트 파일이 있는 디렉터리의 절대 경로입니다. C:\MyCompany\MyProduct MSBuildProjectFile 파일 이름 확장명을 포함하는 프로젝트 파일의 전체 파일 이름 MyApp.proj MSBuildProjectExtension 마침표를 포함하는 프로젝트 파일의 파일 이름 확장명 .proj MSBuildProjectFullPath 프로젝트 파일의 절대 경로와 전체 파일 이름 C:\MyCompany\MyProduct\MyApp.proj MSBuildProjectName 파일 이름 확장명을 제외한 프로젝트 파일의 파일 이름 MyApp MSBuildBinPath 현재 사용되고 있는 MSBuild 이진 파일이 있는 디렉터리의 절대 경로 C:\Windows\Microsoft.Net\Framework\v2.0 MSBuildProjectDefaultTargets 기본 Target <Project DefaultTargets="A;B;C" > MSBuildExtensionsPath Program Files 디렉터리 아래의 MSBuild 폴더입니다. 이 위치는 사용자 지정 대상 파일을 넣는 데 유용합니다. 예를 들어, 대상 파일을 \Program Files\MSBuild\MyFiles\Northwind.targets에 설치한 후 다음 XML을 사용하여 프로젝트 파일로 가져올 수 있습니다. <Import Project="$(MSBuildExtensionsPath)\MyFiles\Northwind.targets"/>
속성 (Property) 환경변수 항목은 컬렉션에 저장 되지만 속성은 단일 스칼라 값을 포함한다. 메타데이타를 포함하지 않는다. PropertyGroup 노드의 자식노드 속성참조 : $(PropertyName) 명령줄 /property or /p
작업 (Task) <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <Stuff Include=“*.cs" Exclude = “One.cs”> <Display>false</Display> </Stuff> <Stuff Include="Two.cs"> <Display>true</Display> </ItemGroup> <Target Name="Batching"> <Message Text="@(Stuff)" Condition=" '%(Display)' == 'true' "/> </Target> </Project>
작업 (Task) 재사용 가능한 실행 코드 단위 Managed Code 로 작성 (C#, VB.NET 등) Using Task 문 ITask 인터페이스 구현
작업 (Task) Using Task <UsingTask TaskName="TaskName" AssemblyName = “AsmName" Condition="'String A'=='String B'" />
작업 (Task) Using Task <UsingTask TaskName="TaskName" AssemblyName = “AsmName" Condition="'String A'=='String B'" /> Using Task 특성 설명 AssemblyName AssemblyName 또는 AssemblyFile 특성이 필요합니다. 로드할 어셈블리의 이름입니다. AssemblyName 특성에서는 강력한 이름의 어셈블리를 허용하지만 필수적 요소는 아닙니다. AssemblyFile 특성을 사용하는 경우에는 이 특성을 사용할 수 없습니다 AssemblyFile 어셈블리의 파일 경로입니다. 이 특성에는 전체 경로와 상대 경로를 모두 사용할 수 있습니다. 상대 경로는 현재 프로젝트 디렉터리를 기준으로 합니다. AssemblyName 특성을 사용하는 경우에는 이 특성을 사용할 수 없습니다. TaskName 필수 특성입니다. 어셈블리에서 참조할 작업의 이름입니다. 모호성이 발생할 가능성이 있으면 이 특성에 항상 전체 네임스페이스를 지정해야 합니다. Condition 선택적 특성입니다.
작업 (Task) 작업 참조 (ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.en/dv_fxgenref/html/b3144b27-a426-4259-b8ae-5f7991b202b6.htm) Copy Task Delete Task Exec Task MakeDir Task Message Task Csc Task Vbc Task 기타
대상 (Target) Target DependsOnTargets <Target Name="Build" DependsOnTargets="Resources"> <Csc Sources="hello.cs" Resources="@(Resources)" OutputAssembly="hello.exe"/> </Target>
로깅 (Logging) MSBuild 로거 빌드 Event, , 메시지, 경고 및 오류 정보 Console 로거 : 파일로거 /consoleloggerparameters - 사용 /noconsolelogger - 비활성화 파일로거 /l:FileLogger,Microsoft.Build.Engine;logfile=MyLog.log Ex ) MSBuild MyProj.proj /l:FileLogger,Microsoft.Build.Engine;logfile=MyLog.log append=true;verbosity=diagnostic;encoding=utf-8 ILogger 인터페이스 구현 Logger 클래스 상속