빌드에서 파일 제외
프로젝트 파일에서 와일드카드를 사용하여 모든 파일을 하나의 디렉터리 또는 중첩된 디렉터리 집합에 빌드의 입력으로 포함할 수 있습니다. 그러나 해당 디렉터리 또는 중첩된 디렉터리 집합 중 하나의 디렉터리에 빌드의 입력으로 포함하지 않으려는 하나의 파일이 있을 수 있습니다. 입력 목록에서 해당 파일 또는 디렉터리를 명시적으로 제외할 수 있습니다. 특정 조건에서만 포함하려는 파일이 프로젝트에 있을 수도 있습니다. 파일을 빌드에 포함할 조건을 명시적으로 선언할 수 있습니다.
참고 항목
이 문서에 설명된 기술은 F# 및 C++에 적용되지 않습니다. 이러한 프로젝트 시스템은 원본 파일 자체를 관리합니다.
Visual Studio를 사용하여 파일 제외
Visual Studio를 사용하는 경우 솔루션 탐색기의 파일을 선택하고 속성 창을 확인(Alt+Enter 키를 누르기)한 다음 빌드 작업을 None으로 설정합니다.
그러면 MSBuild 프로젝트 파일이 다음과 같이 변경됩니다.
<ItemGroup>
<Compile Remove="ClassToExclude.cs" />
</ItemGroup>
<ItemGroup>
<None Include="ClassToExclude.cs" />
</ItemGroup>
이는 소수의 파일에서 잘 작동하지만 더 많은 수의 파일 또는 특정 패턴과 일치하는 파일로 확장되지는 않습니다. .NET 프로젝트에서 MSBuild를 사용하여 다음 설명과 같이 glob라고도 하는 와일드카드 식을 사용하여 파일과 디렉터리를 제외할 수 있습니다.
.NET 프로젝트에서 파일 또는 디렉터리 제외
항목 목록은 빌드에 사용할 입력 파일입니다. .NET SDK 프로젝트와 같은 대부분의 프로젝트에는 표준 가져오기에서 이미 정의한 다양한 유형의 항목(예: 원본 파일 Compile
, 특정 정적 파일 Content
등)에 대해 미리 정의된 항목 목록이 있습니다. 이러한 항목의 목록은 Common MSBuild 프로젝트 항목에서 찾을 수 있습니다. 프로젝트 코드에서는 관련된 모든 항목을 포함하도록 미리 정의됩니다. 예를 들어 C# 프로젝트의 Compile
에는 .cs
확장이 있는 모든 파일이 포함됩니다.
파일을 제외하기 위해 항목의 Remove
특성을 사용할 수 있습니다.
<ItemGroup>
<Compile Remove="ClassToExclude.cs" />
</ItemGroup>
여러 개별 파일 또는 다양한 GLOB 패턴을 지정할 수 있습니다.
<ItemGroup>
<Compile Remove="Contoso*.cs" /> <!-- Wildcard on filename -->
<Compile Remove="File1.cs;File2.cs" /> <!-- List of files with separator -->
<Compile Remove="Contoso/**/*.cs" /> <!-- All .cs files in a directory subtree -->
</ItemGroup>
지원되는 패턴 목록은 패턴 형식을 참조하세요.
MSBuild 언어에서 파일 또는 디렉터리 포함 및 제외
원시 MSBuild 언어(즉 SDK에 대한 표준 가져오기 또는 참조가 없는 경우)에서 포함하려는 항목은 개별적으로 또는 Include
특성을 사용하여 그룹으로 선언됩니다. 예시:
<CSFile Include="Form1.cs"/>
<CSFile Include ="File1.cs;File2.cs"/>
<CSFile Include="*.cs"/>
<JPGFile Include="Images\**\*.jpg"/>
와일드카드를 사용하여 모든 파일을 하나의 디렉터리 또는 중첩된 디렉터리 집합에 빌드의 입력으로 포함한 경우, 해당 디렉터리 또는 중첩된 디렉터리 집합 중 하나의 디렉터리에 포함하지 않으려는 하나 이상의 파일이 있을 수 있습니다. 항목 목록에서 항목을 제외하려면 Exclude
특성을 사용합니다.
Exclude
는 실제로 항목 작업이 아닙니다. 그 자체로는 사용할 수 없으며 Include
에 대한 한정자로만 사용 가능합니다.
.cs
를 제외한 모든 *.vb
또는 Form2
파일을 포함하려면
다음
Include
및Exclude
특성 중 하나를 사용합니다.<CSFile Include="*.cs" Exclude="Form2.cs"/>
또는
<VBFile Include="*.vb" Exclude="Form2.vb"/>
Form3
및 을(를) 제외한 Form2
모든 .cs
파일 또는 .vb
파일을 포함하려면
다음
Include
및Exclude
특성 중 하나를 사용합니다.<CSFile Include="*.cs" Exclude="Form2.cs;Form3.cs"/>
또는
<VBFile Include="*.vb" Exclude="Form2.vb;Form3.vb"/>
Images
디렉터리에서 해당 항목을 제외한 모든 .jpg
파일을 Version2
디렉터리의 하위 디렉터리에 포함하려면
다음
Include
및Exclude
특성을 사용합니다.<JPGFile Include="Images\**\*.jpg" Exclude = "Images\**\Version2\*.jpg"/>
참고 항목
두 특성의 경로를 모두 지정해야 합니다.
Include
특성에서 파일 위치를 지정할 때 절대 경로를 사용하는 경우Exclude
특성에서도 절대 경로를 사용해야 하고,Include
특성에서 상대 경로를 사용하는 경우Exclude
특성에서도 상대 경로를 사용해야 합니다.
제외 및 제거
고유한 항목 목록을 정의하는 경우 가능하면 언제든지 Exclude
를 사용해야 합니다. 제외되는 항목은 처리할 필요가 없으므로 Include
와 동일한 선언에서 Exclude
를 사용할 경우 성능상 이점이 있습니다.
Compile
, Content
등 표준 항목 목록의 경우와 같이 미리 정의된 항목 목록이 있는 경우 Remove
를 사용합니다. 이 경우 Exclude
는 지원되지 않습니다.
참고 항목
지원하는 SDK를 사용하는 경우 $(OverrideDefaultCompileItems)
속성을 true
로 설정하여 필요에 따라 고유한 Compile
항목을 Include
또는 Exclude
로 정의할 수 있습니다.
조건을 사용하여 빌드의 입력에서 파일 또는 디렉터리 제외
예를 들어 디버그 빌드에 포함하지만 릴리스 빌드에는 포함하지 않으려는 항목이 있는 경우 Condition
특성을 사용하여 항목을 포함할 조건을 지정할 수 있습니다.
Formula.vb 파일을 릴리스 빌드에만 포함하려면
다음과 같이
Condition
특성을 사용합니다.<Compile Include="Formula.vb" Condition=" '$(Configuration)' == 'Release' " />
예시
다음 코드 예제에서는 Form2.cs를 제외한 모든 .cs 파일을 디렉터리에 포함한 프로젝트를 빌드합니다.
<Project DefaultTargets="Compile"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
<PropertyGroup>
<builtdir>built</builtdir>
</PropertyGroup>
<ItemGroup>
<CSFile Include="*.cs" Exclude="Form2.cs"/>
<Reference Include="System.dll"/>
<Reference Include="System.Data.dll"/>
<Reference Include="System.Drawing.dll"/>
<Reference Include="System.Windows.Forms.dll"/>
<Reference Include="System.XML.dll"/>
</ItemGroup>
<Target Name="PreBuild">
<Exec Command="if not exist $(builtdir) md $(builtdir)"/>
</Target>
<Target Name="Compile" DependsOnTargets="PreBuild">
<Csc Sources="@(CSFile)"
References="@(Reference)"
OutputAssembly="$(builtdir)\$(MSBuildProjectName).exe"
TargetType="exe" />
</Target>
</Project>