MSBuild 명령줄 참조
MSBuild.exe를 사용하여 프로젝트 또는 솔루션 파일을 빌드할 경우 여러 스위치를 포함하여 프로세스의 다양한 측면을 지정할 수 있습니다.
모든 스위치는 두 가지 형식으로 사용할 수 있습니다. -switch
/switch
본 설명서에는 -switch
형식만 표시되어 있습니다. 스위치는 대/소문자를 구분하지 않습니다. Windows 명령 프롬프트 이외의 셸에서 MSBuild를 실행하는 경우 스위치에 대한 인수 목록(세미콜론 또는 쉼표로 구분)은 셸이 해석하지 않고도 MSBuild로 목록을 전달하기 위해 작은따옴표나 큰따옴표가 필요할 수도 있습니다.
.NET CLI 명령 dotnet build, dotnet publish, dotnet msbuild 및 관련 명령은 이러한 스위치를 MSBuild에 전달하므로 이 참조는 해당 명령을 dotnet run
사용할 때 적용할 수 있지만 그렇지 않습니다.
구문
MSBuild.exe [Switches] [ProjectFile]
인수
Argument | 설명 |
---|---|
ProjectFile |
지정한 프로젝트 파일에 대상을 빌드합니다. 프로젝트 파일을 지정하지 않으면 MSBuild는 현재 작업 디렉터리에서 proj로 끝나는 파일 이름 확장명을 검색하고 해당 파일을 사용합니다. 이 인수에 대해 Visual Studio 솔루션 파일을 지정할 수도 있습니다. |
스위치
다음 표의 첫 번째 열에는 각 스위치의 길고 짧은 형식이 표시됩니다. 두 형식 모두 동일합니다.
대괄호는 []
선택적 부분을 나타내고 중괄호는 {}
사용자가 제공한 값을 나타냅니다.
Switch | 설명 |
---|---|
-detailedSummary[:{True or False}] -ds[:{True or False}] |
True 인 경우, 빌드된 구성과 노드에 대한 해당 구성의 예약 상태와 관련된 자세한 정보를 빌드 로그 끝에 표시합니다. |
-getItem:{itemName,...} |
빌드를 실행하지 않고 평가 후 항목 또는 항목의 값을 작성하거나 옵션 또는 -getTargetResult 옵션을 사용하는 경우 -targets 빌드 후 값을 작성합니다. |
-getProperty:{propertyName,...} |
빌드를 실행하지 않고 평가 후 속성 또는 속성의 값을 작성하거나 옵션 또는 -getTargetResult 옵션을 사용하는 경우 -targets 빌드 후 값을 작성합니다. |
-getTargetResult:{targetName,...} |
지정된 대상의 출력 값을 작성합니다. |
-graphBuild[:{True or False}] -graph[:{True or False}] |
MSBuild가 프로젝트 그래프를 생성 및 빌드합니다. 그래프를 생성하려면 프로젝트 참조를 식별하여 종속성을 구성해야 합니다. 해당 그래프를 빌드하려면 기존 MSBuild 예약과는 달리, 프로젝트 참조를 참조하는 프로젝트보다 먼저 프로젝트 참조를 빌드해야 합니다. MSBuild 16 이상이 필요합니다. |
-help /? 또는 -h |
사용 정보를 표시합니다. 다음 명령을 예로 들 수 있습니다.msbuild.exe -? |
-ignoreProjectExtensions: {extensions} -ignore: {extensions} |
빌드할 프로젝트 파일을 결정할 때 지정된 확장명을 무시합니다. 다음 예제에서와 같이 여러 확장명은 세미콜론이나 쉼표로 구분합니다.-ignoreprojectextensions:.vcproj,.sln |
-inputResultsCaches[:{cacheFile; ...}] -irc[:{cacheFile; ...}] |
MSBuild에서 빌드 결과를 읽을 입력 캐시 파일의 세미콜론으로 구분된 목록입니다. 이 값으로 설정하면 -isolateProjects 이 값이 .로 설정됩니다True .False |
-interactive[:{True or False}] |
빌드의 작업이 사용자와 상호 작용할 수 있음을 나타냅니다. 대화형 작업이 필요하지 않은 자동화된 시나리오에서는 이 인수를 사용하지 마세요. -interactive 를 지정하는 것은 -interactive:true 를 지정하는 것과 같습니다. 매개 변수를 사용하여 지시 파일에서 제공되는 값을 재정의합니다. |
-isolateProjects[:{True, MessageUponIsolationViolation, False}] -isolate[:{True, MessageUponIsolationViolation, False}] |
MSBuild가 각 프로젝트를 개별적으로 빌드합니다. 또는 짧은 형식Message 으로 MessageUponIsolationViolation 설정하면 스위치가 제공된 경우 -outputResultsCache 최상위 대상의 결과만 직렬화됩니다. 이 옵션은 부작용을 고려하지 않는 캐시된 대상에 대한 종속성으로 인해 잘못된 상태를 사용하여 종속성 프로젝트에서 격리 위반 대상의 가능성을 완화하는 것입니다. (예: 속성의 정의) 이 모드는 평가 시 프로젝트 그래프를 정적으로 검색할 수 있어야 하지만 대규모 프로젝트 집합을 빌드할 때 예약을 개선하고 메모리 오버헤드를 줄일 수 있으므로 더 제한적입니다. |
-lowPriority[:{True or False}] -low[:{True or False}] |
MSBuild가 낮은 프로세스 우선 순위에서 실행되도록 합니다. -lowPriority 를 지정하는 것은 -lowPriority:True 를 지정하는 것과 같습니다. |
-maxCpuCount[:{number}] -m[:{number}] |
빌드할 때 사용할 동시 프로세스의 최대 수를 지정합니다. 이 스위치를 포함하지 않으면 기본값은 1입니다. 값을 지정하지 않고 이 스위치를 포함하는 경우 MSBuild는 컴퓨터의 최대 프로세서 수를 사용합니다. 자세한 내용은 병렬로 여러 프로젝트 빌드를 참조하세요. 다음 예제에서는 세 가지 MSBuild 프로세스를 사용해서 빌드하도록 MSBuild에 지시하여 세 프로젝트를 동시에 빌드할 수 있도록 합니다. msbuild myproject.proj -maxcpucount:3 |
-noAutoResponse -noautorsp |
MSBuild.rsp 또는 Directory.Build.rsp 파일을 자동으로 포함하지 마세요. |
-nodeReuse:{value} -nr:{value} |
MSBuild 노드의 재사용을 사용하거나 사용하지 않도록 설정합니다. 다음 값을 지정할 수 있습니다. - True. 노드는 후속 빌드에 사용될 수 있도록 빌드가 완료된 후에도 남습니다(기본값). - False. 빌드가 완료된 후에는 노드가 남지 않습니다. 노드는 실행되고 있는 프로젝트에 해당됩니다. 스위치를 -maxcpucount 포함하는 경우 여러 노드를 동시에 실행할 수 있습니다. |
-nologo |
시작 배너 또는 저작권 메시지를 표시하지 않습니다. |
-preprocess[:{filepath}] -pp[:{filepath}] |
가져올 모든 파일을 인라인하고 해당 경계를 표시하여 집계된 단일 프로젝트 파일을 만듭니다. 이 스위치를 사용하여 가져올 파일, 파일을 가져올 위치 및 빌드에 사용할 파일을 보다 쉽게 확인할 수 있습니다. 이 스위치를 사용하면 프로젝트가 빌드되지 않습니다.filepath 를 지정하는 경우 집계된 프로젝트 파일은 파일에 출력됩니다. 그렇지 않은 경우 출력이 콘솔 창에 나타납니다.Import 요소를 사용하여 프로젝트 파일을 다른 프로젝트 파일에 삽입하는 방법에 대한 자세한 내용은 가져오기 요소(MSBuild) 및 방법: 여러 프로젝트 파일에서 동일한 대상 사용을 참조하세요. |
-outputResultsCache[:{cacheFile}] -orc[:{cacheFile}] |
MSBuild가 빌드의 끝에 빌드 결과 캐시의 내용을 쓰는 출력 캐시 파일입니다. 이 값으로 설정하면 -isolateProjects 이 값이 .로 설정됩니다True .False |
profileEvaluation:{file} |
MSBuild 평가를 프로파일링하고 결과를 지정된 파일에 작성합니다. 지정된 파일의 확장명이 ‘.md’인 경우 결과는 Markdown 형식으로 생성됩니다. 그렇지 않으면 탭으로 구분된 파일이 생성됩니다. |
-property:{name}={value} -p:{name}={value} |
지정된 프로젝트 수준 속성을 설정하거나 재정의합니다. 여기서 name 은 속성 이름이고 value 는 속성 값입니다. 각 속성을 개별적으로 지정하거나 다음 예제에서와 같이 세미콜론 또는 쉼표를 사용하여 여러 속성을 구분합니다.-property:WarningLevel=2;OutDir=bin\Debug 일반적으로 사용되는 속성 목록은 일반적인 MSBuild 프로젝트 속성을 참조하세요. 사용 가능한 속성의 전체 집합은 프로젝트 형식, SDK 및 가져온 파일에 따라 달라집니다. |
-restore -r |
실제 대상을 빌드하기 전에 Restore 대상을 실행합니다. |
-restoreProperty:{name}={value} -rp:{name}={value} |
복원하는 동안에만 이러한 프로젝트 수준 속성을 설정하거나 재정의하며 인수와 함께 -property 지정된 속성을 사용하지 마세요. name 은 속성 이름이고 value 는 속성 값입니다. 세미콜론 또는 쉼표를 사용하여 여러 속성을 구분하거나 각 속성을 개별적으로 지정합니다. |
-target:{targets} -t:{targets} |
프로젝트에서 지정된 대상을 빌드합니다. 각 대상을 개별적으로 지정하거나 다음 예제에서와 같이 세미콜론 또는 쉼표를 사용하여 여러 대상을 구분합니다.-target:PrepareResources;Compile 이 스위치를 사용하여 대상을 지정하는 경우 프로젝트 파일의 특성에 있는 DefaultTargets 대상 대신 실행됩니다. 자세한 내용은 대상 빌드 순서 및 방법: 먼저 빌드할 대상 지정을 참조하세요.대상은 작업 그룹입니다. 자세한 내용은 대상을 참조하세요. |
-targets[:{file}] -ts[:{file}] |
빌드 프로세스를 실제로 실행하지 않고 지정된 파일(또는 파일을 지정하지 않은 경우 출력 디바이스)에 사용 가능한 대상 목록을 씁니다. |
-toolsVersion:{version} -tv:{version} |
사용자 지정 도구 집합을 지정합니다. 도구 집합은 애플리케이션을 빌드하는 데 사용되는 작업, 대상 및 도구로 구성됩니다. 도구 집합(ToolsVersion) 및 표준 및 사용자 지정 도구 집합 구성을 참조하세요. |
-validate:[{schema}] -val[{schema}] |
프로젝트 파일의 유효성을 검사하고 유효성 검사에 통과하면 프로젝트를 빌드합니다.schema 를 지정하지 않으면 기본 스키마에 대해 프로젝트의 유효성을 검사합니다.schema 를 지정하는 경우 지정한 스키마에 대해 프로젝트의 유효성을 검사합니다.설정 예: -validate:MyExtendedBuildSchema.xsd |
-verbosity:{level} -v:{level} |
빌드 로그에 표시할 정보의 양을 지정합니다. 각 로거는 해당 로거에 대해 설정한 자세한 정도를 기준으로 이벤트를 표시합니다. 자세한 정도를 q[uiet] , m[inimal] , n[ormal] (기본값), d[etailed] 및 diag[nostic] 로 지정할 수 있습니다.설정 예: -verbosity:quiet |
-version -ver |
버전 정보만 표시합니다. 프로젝트는 빌드되지 않았습니다. |
@{file} |
텍스트 파일에서 명령줄 스위치를 삽입합니다. 여러 파일을 사용하는 경우 별도로 지정합니다. 자세한 내용은 지시 파일을 참조하세요. |
-warnAsError[:{code; ...}] -err[:{code; ...}] |
오류로 처리되는 경고 코드의 목록입니다. 여러 경고 코드를 구분하려면 세미콜론 또는 쉼표를 사용합니다. 모든 경고를 오류로 처리하려면 값이 없는 스위치를 사용합니다. 경고가 오류로 처리되면 대상은 경고인 것처럼 계속 실행되지만 전체 빌드는 실패합니다. 예: -err:MSB4130 |
-warnNotAsError[:{code; ...}] -noerr[:{code; ...}] |
MSBuild 17.0 이상. 오류로 승격해서는 안 되는 경고 코드 목록입니다. 특히 warnAsError 스위치가 모든 경고를 오류로 승격하도록 설정된 경우 warnNotAsError로 지정된 오류 코드는 승격되지 않습니다. warnAsError가 모든 경고를 오류로 승격하도록 설정되지 않은 경우에는 영향을 주지 않습니다. 여러 경고 코드를 구분하려면 세미콜론 또는 쉼표를 사용합니다. 예: -noerr:MSB4130 |
-warnAsMessage[:{code}; ...}] -noWarn[:{code; ...}] |
중요도가 낮은 메시지로 처리되는 경고 코드 목록입니다. 여러 경고 코드를 구분하려면 세미콜론 또는 쉼표를 사용합니다. 예: -noWarn:MSB3026 |
로거 스위치
Switch | 설명 |
---|---|
-binaryLogger[:[LogFile=]{output.binlog} [;ProjectImports=None ,Embed ,ZipFile]] -bl[:[LogFile=]{output.binlog} [;ProjectImports=None ,Embed ,ZipFile]] |
모든 빌드 이벤트를 압축된 이진 파일로 직렬화합니다. 기본적으로 이 파일은 현재 디렉터리에 있고 이름이 msbuild.binlog입니다. 이진 로그는 빌드 프로세스를 자세히 설명하는 것으로, 나중에 텍스트 로그를 다시 구성하기 위해 사용할 수 있고 기타 분석 도구에서 사용될 수 있습니다. 이진 로그는 일반적으로 가장 상세한 텍스트 진단 수준 로그보다 10~20배 작지만, 더 자세한 정보를 포함하고 있습니다. 기본적으로 이진 로거는 빌드 중 가져온 모든 프로젝트와 발생한 대상 파일을 비롯한 프로젝트 파일을 소스 텍스트를 수집합니다. 선택적 ProjectImports 매개 변수는 이 동작을 제어합니다.- ProjectImports=None. 프로젝트 가져오기를 수집하지 않습니다. - ProjectImports=Embed. 로그 파일에 프로젝트 가져오기를 포함합니다(기본값). - ProjectImports=ZipFile. 출력이 이진 로그 파일 이름과 동일한 {output}.projectimports.zip> <프로젝트 파일을 저장합니다. ProjectImports의 기본 설정은 Embed입니다. 참고: 로거는 MSBuild가 아닌 원본 파일(예: .cs , .cpp 등)을 수집하지 않습니다..binlog 파일을 프로젝트/솔루션 대신 인수로 msbuild.exe에 전달하여 "재생"할 수 있습니다. 다른 로거는 원래 빌드가 발생하는 것처럼 로그 파일에 포함된 정보를 받습니다. 이진 로그 및 해당 사용법에 대해 https://github.com/dotnet/msbuild/blob/main/documentation/wiki/Binary-Log.md 에서 자세히 알아볼 수 있습니다. 예: - -bl - -bl:output.binlog - -bl:output.binlog;ProjectImports=None - -bl:output.binlog;ProjectImports=ZipFile - -bl:..\..\custom.binlog - -binaryLogger |
-consoleLoggerParameters:{parameters} -clp:{parameters} |
지정한 매개 변수를 콘솔 로거에 전달하면 콘솔 창에 빌드 정보가 표시됩니다. 다음 매개 변수를 지정할 수 있습니다. - PerformanceSummary. 작업, 대상 및 프로젝트에 소요된 시간을 표시합니다. - Summary. 끝에 오류 및 경고 요약을 표시합니다. - NoSummary. 끝에 오류 및 경고 요약을 표시하지 않습니다. - ErrorsOnly. 오류만 표시합니다. - WarningsOnly. 경고만 표시합니다. - NoItemAndPropertyList. 자세한 정도를 diagnostic 으로 설정한 경우 각 프로젝트 빌드의 시작 부분에 표시될 항목 및 속성 목록을 표시하지 않습니다.- ShowCommandLine. TaskCommandLineEvent 메시지를 표시합니다.- ShowProjectFile. 진단 메시지에서 프로젝트 파일의 경로를 표시합니다. 기본적으로 이 설정은 켜짐입니다. - ShowTimestamp. 원하는 메시지에 접두사로 타임스탬프를 표시합니다. - ShowEventId. 각각 시작된 이벤트, 완료된 이벤트 및 메시지에 대한 이벤트 ID를 표시합니다. - ForceNoAlign. 텍스트를 콘솔 버퍼 크기에 맞추지 않습니다. - DisableConsoleColor. 모든 로깅 메시지에 기본 콘솔 색을 사용합니다. - DisableMPLogging. 다중 프로세서가 아닌 모드에서 실행할 때 출력의 다중 프로세서 로깅 스타일을 사용하지 않습니다. - EnableMPLogging. 다중 프로세서가 아닌 모드에서 실행할 때도 다중 프로세서 로깅 스타일을 사용합니다. 이 로깅 스타일은 기본적으로 설정되어 있습니다. - ForceConsoleColor. 콘솔에서 지원하지 않는 경우에도 ANSI 콘솔 색을 사용합니다. - Verbosity. 이 로거에 대한 설정을 재정의 -verbosity 합니다.다음 예제에서와 같이 여러 매개 변수는 세미콜론으로 구분합니다. -consoleloggerparameters:PerformanceSummary;NoSummary -verbosity:minimal 기본 콘솔 로거는 일반적인 자세한 정도이며 Summary 를 포함합니다. |
-distributedFileLogger -dfl |
MSBuild 노드의 빌드 출력을 자체 파일에 로깅합니다. 이러한 파일의 초기 위치는 현재 디렉터리입니다. 기본적으로 파일 이름은 MSBuild{NodeId}.log. 스위치를 -fileLoggerParameters 사용하여 fileLogger의 파일 위치 및 기타 매개 변수를 지정할 수 있습니다.스위치를 사용하여 로그 파일의 -fileLoggerParameters 이름을 지정하는 경우 분산 로거는 해당 이름을 템플릿으로 사용하고 각 노드에 대한 로그 파일을 만들 때 해당 이름에 노드 ID를 추가합니다. |
-distributedLogger:{central logger},{forwarding logger}, ... -dl:{central logger},{forwarding logger, ...} |
MSBuild의 이벤트를 로그하고 각 노드에 다른 로거 인스턴스를 연결합니다. 여러 로거를 지정하려면 각 로거를 개별적으로 지정합니다. 로거 구문을 사용하여 전달 로거에 대한 추가 클래스 및 제공하는 것을 제외하고 로거를 지정합니다. 로거 구문은 스위치를 참조하세요 -logger .다음 예에서는 이 스위치의 사용 방법을 보여 줍니다. -dl:XMLLogger,MyLogger,Version=1.0.2,Culture=neutral -dl:MyLogger,C:\My.dll*ForwardingLogger,C:\Logger.dll |
-fileLogger[{number}] -fl[{number}] |
현재 디렉터리의 단일 파일에 빌드 출력을 로깅합니다. number 를 지정하지 않으면 출력 파일 이름은 msbuild.log로 지정됩니다. number 를 지정하는 경우 출력 파일 이름은 msbuild<n>.log로 지정됩니다. 여기서 <n>은 number 입니다. Number 는 1에서 9의 숫자일 수 있습니다.스위치를 -fileLoggerParameters 사용하여 fileLogger의 파일 위치 및 기타 매개 변수를 지정할 수 있습니다. |
-fileLoggerParameters[{number}]: parameters -flp[{number}]: {parameters} |
파일 로거 및 분산된 파일 로거에 대해 추가 매개 변수를 지정합니다. 이 스위치의 존재는 해당 -filelogger[number] 스위치가 있음을 의미합니다. Number 는 1에서 9의 숫자일 수 있습니다.에 대해 나열된 -consoleloggerparameters 모든 매개 변수를 사용할 수 있습니다. 다음 매개 변수 중 하나 이상을 사용할 수도 있습니다.- LogFile. 빌드 로그가 기록되는 로그 파일의 경로입니다. 분산된 파일 로거는 해당 로그 파일의 이름 앞에 이 경로를 추가합니다. - Append. 빌드 로그가 로그 파일에 추가될지 또는 로그 파일을 덮어쓸지를 결정합니다. 이 스위치를 설정하면 빌드 로그가 로그 파일에 추가됩니다. 스위치가 없으면 기존 로그 파일의 내용을 덮어씁니다. 예: msbuild myfile.proj -flp:FileLogger,Microsoft.Build;logfile=MyLog.log;append 명시적 true 또는 false 설정을 포함하는 경우 설정에 관계없이 로그가 추가됩니다. 추가 스위치를 포함하지 않으면 로그를 덮어씁니다.이 경우 파일을 덮어씁니다. msbuild myfile.proj -flp:FileLogger,Microsoft.Build;logfile=MyLog.log 이 경우 파일이 추가됩니다. msbuild myfile.proj -flp:FileLogger,Microsoft.Build;logfile=MyLog.log;append=true 이 경우 파일이 추가됩니다. msbuild myfile.proj -flp:FileLogger,Microsoft.Build;logfile=MyLog.log;append=false - Encoding. 파일에 대한 인코딩을 지정합니다(예: UTF-8, 유니코드 또는 ASCII). 다음 예제에서는 경고 및 오류에 대한 별도의 로그 파일을 생성합니다. -flp1:logfile=errors.txt;errorsonly -flp2:logfile=warnings.txt;warningsonly 다음 예제에서는 다른 가능성을 보여 줍니다. -fileLoggerParameters:LogFile=MyLog.log;Append; Verbosity=diagnostic;Encoding=UTF-8 -flp:Summary;Verbosity=minimal;LogFile=msbuild.sum -flp1:warningsonly;logfile=msbuild.wrn -flp2:errorsonly;logfile=msbuild.err |
-logger:logger -l:logger |
MSBuild의 이벤트를 로그하는 데 사용할 로거를 지정합니다. 여러 로거를 지정하려면 각 로거를 개별적으로 지정합니다.logger 에 대해 다음 구문을 사용합니다. [LoggerClass,]LoggerAssembly[;LoggerParameters] LoggerClass 에 대해 다음 구문을 사용합니다. [PartialOrFullNamespace.]LoggerClassName 어셈블리가 정확히 하나의 로거를 포함하는 경우 로거 클래스를 지정할 필요가 없습니다. LoggerAssembly 에 대해 다음 구문을 사용합니다. AssemblyName[,StrongName] \| AssemblyFile 로거 매개 변수는 선택적이며 정확히 입력한 대로 로거에 전달됩니다. 다음 예제에서는 스위치를 -logger 사용합니다.-logger:XMLLogger,MyLogger,Version=1.0.2,Culture=neutral -logger:XMLLogger,C:\Loggers\MyLogger.dll;OutputAsHTML |
-noConsoleLogger -noconlog |
기본 콘솔 로거를 사용하지 않도록 설정하고 콘솔에 이벤트를 로깅하지 않습니다. |
-terminalLogger[:auto ,on ,off] -tl[:auto ,on ,off] |
터미널 로거를 사용하거나 사용하지 않도록 설정합니다. 터미널 로거는 콘솔에서 실시간으로 향상된 빌드 출력을 제공하고 프로젝트별로 논리적으로 구성하며 실행 가능한 정보를 강조 표시하도록 설계되었습니다. 표준 출력이 리디렉션되지 않은 경우에만 터미널 로거를 사용하도록 지정 auto 하거나 인수 없이 옵션을 사용합니다. 출력을 구문 분석하지 않거나 이후 버전에서 변경되지 않은 상태로 유지합니다. 이 옵션은 MSBuild 17.8 이상에서 사용할 수 있습니다. |
예 1
다음 예제에서는 MyProject.proj 프로젝트의 rebuild
대상을 빌드합니다.
MSBuild.exe MyProject.proj -t:rebuild
예제 2
MSBuild.exe를 사용하여 보다 복잡한 빌드를 수행할 수 있습니다. 예를 들어 이 프로그램을 사용하여 솔루션에 특정 프로젝트의 특정 대상을 빌드할 수 있습니다. 다음 예제에서는 NotInSolutionFolder
프로젝트를 다시 빌드하고, NewFolder 솔루션 폴더에 있는 InSolutionFolder
프로젝트를 정리합니다.
msbuild SlnFolders.sln -t:NotInSolutionfolder:Rebuild;NewFolder\InSolutionFolder:Clean