[build] msbuild를 사용하여 솔루션의 프로젝트 파일 지정

devenv.com에서와 같이 msbuild를 사용하여 솔루션의 특정 프로젝트를 빌드하기위한 명령 줄을 원합니다. devenv.com에서 다음 명령 줄을 사용하여 솔루션 프로젝트를 지정할 수 있습니다.

devenv.com /Build Release|x86 test.sln /project "testproject"

위의 명령 줄을 사용하여 devenv.com을 사용하여 test.sln에서 testproject를 빌드 할 수 있습니다. 동일한 솔루션에 대한 msbuild의 명령 줄은 무엇입니까?

감사



답변

msbuild test.sln /t:project /p:Configuration="Release" /p:Platform="x86" /p:BuildProjectReferences=false

할당 된 /t것은 솔루션의 프로젝트 이름이며 프로젝트 파일 이름과 다를 수 있습니다.

또한 방법 : MSBuild.exe를 사용하여 솔루션에서 특정 대상 빌드에 설명 된대로 :

프로젝트 이름은 임의의 문자가 포함 된 경우 %, $, @, ;, ., (, ), 또는 ',로 교체 _지정된 대상 이름입니다.

한 번에 여러 프로젝트를 빌드 할 수도 있습니다.

msbuild test.sln /t:project;project2 /p:Configuration="Release" /p:Platform="x86" /p:BuildProjectReferences=false

다시 빌드하거나 깨끗 변경하려면 /t:project/t:project:clean/t:project:rebuild


답변

MSBuild는 실제로 솔루션이 아닌 프로젝트를 사용하여 작동합니다. 이 솔루션은 내부적으로 MSBuild의 임시 프로젝트 파일로 구문 분석하는 데만 사용됩니다. 다음 명령을 실행하여 MSBuild를 통해 직접 관심있는 프로젝트를 빌드 할 수 있어야합니다.

"msbuild testproject /p:Configuration=Release /p:Platform=x86"

솔루션 대신 프로젝트를 직접 사용할 수있는 한 가지 중요한 문제가 있습니다. 프로젝트에 대한 참조를 추가하고 빌드 시스템이 종속성을 자동으로 해결하도록하는 대신 솔루션을 사용하여 프로젝트 간의 종속성을 표현하는 경우 .

sln 파일을 사용하여 빌드 순서를 적용하는 경우 이러한 종속성을 proj 파일에서 직접 작업하고 sln에서 제거하는 것이 좋습니다. 이렇게하면 MSBuild에서 모든 proj 파일을 직접 호출 할 수 있으며 프로젝트는 추가 작업없이 모두 독립적으로 빌드됩니다. 실제로 sln 파일을 빌드 입력이 아닌 Visual Studio에서 더 쉽게 작업 할 수 있도록 프로젝트 그룹으로 처리해야합니다.


답변

미래 구직자에게 정보로 게시

빌드 스크립트에 다음을 추가하고 한 번 실행하십시오. 그러면 msbuild가 실제로 사용할 정확한 대상 및 기타 정보가 생성됩니다.

예 : 당신이있는 경우 .프로젝트 이름이나 폴더에 msbuild를 예상됩니다 _의 장소에서 ..

set MSBuildEmitSolution=1

정보를 얻은 후 필요한 세부 정보로 빌드 스크립트를 업데이트합니다.


답변

이렇게하려면 프로젝트 이름 이 아닌 프로젝트의 대상 이름 이 무엇인지 알아야합니다 .

이를 확인하는 한 가지 방법은 .NET Framework MSBuildEmitSolution의 값으로 호출되는 특수 환경 변수를 설정 한 후 의도 한 매개 변수로 SLN에 대해 MSBuild를 사용하는 것 입니다 1.

set MSBuildEmitSolution=1
msbuild my_stuff.sln /t:rebuild /p:Configuration=Release /p:Platform=x64

최근에 중첩 된 디렉터리의 대상에 대한 매우 구체적인 이름 때문에이 작업을 수행해야했습니다. 그래서 생성 된 파일 my_stuff.sln.metaproj에서 다음 줄을 찾았습니다.

<Target Name="Utils\Firewall\FirewallUtils:Rebuild">

즉, 사용할 명령 줄은 결국

msbuild my_stuff.sln /t:Utils\Firewall\FirewallUtils:Rebuild /p:Configuration=Release /p:Platform=x64


답변

추가 정보를 추가하기 위해 프로젝트 폴더에서 msbuild를 실행하면 기본적으로 프로젝트 파일이 빌드됩니다.

>msbuild

이러한 방식으로 msbuild를 사용하는 방법에는 여러 가지가 있습니다. proj 파일을 직접 지정할 수 있습니다.

>msbuild helloworld.csproj -t:Build.

사용, proj 파일 요구 사항 및 솔루션 대신 프로젝트 빌드의 이점에 대해서는 msbuild 설명서를 검토하십시오.

MS MSBuild 문서

위의 마크 스미스가 언급 한 것처럼 이러한 방식으로 구축하면 이점이 있습니다.


답변