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


116

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

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

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

감사


msbuild에 testproject 자체를 전달하지 않는 이유는 무엇입니까?
Mark Smith

2
더 이상 내 댓글을 수정할 수 없기 때문입니다. 내 말은 솔루션 대신 프로젝트를 직접 참조하는 것입니다. "msbuild testproject / p : Configuration = Release / p : Platform = x86"
Mark Smith

서로 다른 시간 내가 다른 projects.using devenv.com는 해당 솔루션의 프로젝트를 지정하여 쉽게 구축 할 일은
tjdoubts

이것이 유일한 문제인 경우 msbuild를 사용하여 올바른 시간에 필요한 프로젝트를 빌드 할 수 있습니다. 솔루션에서 다른 시간에 실행하는 다른 명령이 이미 있으므로 다른 msbuild 명령을 사용하여 적절한 시간에 프로젝트를 참조하지 않는 이유는 무엇입니까? 프로젝트가 올바르게 설정된 경우 sln 파일을 사용하지 않고 모든 참조를 파악해야합니다.
Mark Smith

답변:


202
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


99
한 가지 중요한 사항 : 프로젝트에 '.'가있는 경우 이름에서 / t로 지정할 때 '_'로 대체해야합니다.
Watusimoto

4
@easton 여러 프로젝트를 빌드하기 위해 synthax는 /t빌드 할 각 프로젝트에 대해 매개 변수 를 반복하는 msbuild 용이었습니다 .msbuild test.sln /t:project /t:project2
Philippe

46
또한 솔루션 폴더를 사용하는 경우 프로젝트 이름 앞에 폴더 이름과 슬래시를 붙여야합니다. 위에서 언급 한 @Watusimoto와 마찬가지로 이름에 마침표 (.)가 있으면 밑줄 (_)로 바꿔야합니다. 나는 다음과 같은 결과를 얻었습니다 /t:SlnFolder\My_Project_name..
Travis Parks

28
@TravisParks : 또한 않는다 "솔루션 폴더"언급 할 가치가있을 수도 없는 파일 시스템 폴더 아니라 솔루션 탐색기보기에서 폴더를 참조하십시오.
joshbodily

4
또한 폴더 이름 (GYP 생성 프로젝트)에서 '('및 ')'를 '_'로 바꿔야했습니다. 모든 특수 문자가 밑줄로 바뀐 것 같습니다.
막심 Viargues

15

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

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

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

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


4
proj 파일에서 빌드 순서를 적용하는 방법을 지정하십시오. 감사.
ProgramCpp

4
프로젝트 이름을 직접 사용하는 또 다른 문제가 있습니다. 예를 들어 솔루션에 5 개의 프로젝트가 있습니다. 일부 프로젝트에는 DebugPro 구성이 있고 다른 프로젝트에는 구성되어 있지 않습니다. 모든 프로젝트가 파일 인 구성으로 프로젝트를 빌드하는 경우 솔루션 구성 DebugPro를 선택한 경우 솔루션 파일 만 각 프로젝트에 사용할 프로젝트 구성을 알고 있습니다.
Alex

@ProgramCpp 한 프로젝트에서 다른 프로젝트로 참조를 추가하면 참조 된 프로젝트가 먼저 빌드되어야 함을 자동으로 파악합니다.
jpaugh

이 방법의 또 다른 단점은 프로젝트의 상대 경로가 솔루션 파일을 기준으로 확인된다는 것입니다. 프로젝트를 직접 빌드하면 상대 경로가 변경됩니다. 출력은 다른 곳에있을 수 있으며 단위 테스트는 잘못된 디렉토리를 조회 할 수 있습니다.
Tomas Kubes

$ (SolutionDir)
Alex Che

8

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

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

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

set MSBuildEmitSolution=1

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


6
` '.'가 있다면 '.'의 자리에 '_'기대 프로젝트 이름 또는 폴더를 msbuild에서`.
dhcgn

2

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

이를 확인하는 한 가지 방법은 .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

2
이것이 내가 필요했던 것입니다. 이것을 실행하지 않으려는 경우 힌트 : 대상은 현재 경로에서 프로젝트 파일로의 폴더 구조에서 프로젝트 파일 확장명 ( .csproj제 경우)을 뺀 것 입니다. 나는 <3 SO!
환불 불가 반품 불가

1

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

>msbuild

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

>msbuild helloworld.csproj -t:Build.

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

MS MSBuild 문서

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.