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.