2010-11-24 5 views
8

Visual Studio에서 프로젝트를 언로드 할 수 있으며 솔루션을 빌드하면 (오른쪽 클릭/빌드) 언로드 된 프로젝트가 빌드되지 않습니다. 그러나 명령 줄에서 MSBuild를 실행하면 다음과 같이됩니다.MSBuild 실행, 언로드 된 프로젝트 존중

C:\Windows\Microsoft.NET\Framework\v3.5\msbuild.exe 
    "$slnFile" /t:build /p:Configuration=Debug /verbosity:minimal 

프로젝트 내장입니다. MSBuild가 Visual Studio에서 언로드 된 프로젝트를 존중하도록하는 방법이 있습니까?

상황에 따라 여러 가지 프로젝트가있는 해결책이 있습니다. 그 중 하나는 빌드 할 때 특별한 소프트웨어가 필요하며 이는 빌드 머신에 존재하지만 모든 개발자 머신에는 존재하지 않습니다. 이는 곧바로 명령 줄 빌드를 수행 할 수 없거나 불량 프로젝트가 발생하면 실패합니다.

아이디어가 있으십니까?

[편집 : Visual Studio에서 MSBuild를 사용하여 MSBuild에서이 작업을 수행 할 수 있어야합니다. VS가 명령 행에서 수행하지 않는 작업은 무엇입니까?]

+0

Visual Studio를 빌드 할 때 솔루션 파일 대신 MSBuild로 컴파일 할 프로젝트가 명시 적으로 전달됩니다. 이것이 프로젝트를 건너 뛰는 방법입니다. 내 답변은 당신이 원하는 것을 할 수있는 대체 방법을 자세히 설명합니다. – adrianbanks

답변

6

MSBuild는 솔루션 내의 프로젝트가로드 된 상태에 대해 아무 것도 모릅니다. 따라서 수행하려는 작업은 불가능합니다.

BUILD_MACHINE (Build -> Configuration Manager 메뉴 사용)이라는 새 빌드 구성을 정의 할 수 있습니다. 이 빌드 구성에서는 모든 프로젝트를 빌드 할 수 있습니다. 다음은 사용자가 빌드 한 구성을 시스템으로 작성한 것입니다. 디버그릴리스 빌드 구성 (동일한 메뉴 옵션 사용)에서 특정 프로젝트를 사용하지 않도록 설정하면 빌드하지 않으려는 프로젝트를 언로드하지 않고도 개발 컴퓨터에서 이러한 구성을 빌드 할 수 있습니다.

MSBuild는 빌드 구성을 존중하므로 Visual Studio 또는 MSBuild를 사용하여 비 빌드 머신 빌드 구성 (예 : 디버그, 릴리스)을 빌드 할 수 있으며 문제가있는 프로젝트는 빌드되지 않습니다.

1

프로젝트가 언로드되었는지 여부에 대한 정보는 sln 파일에 저장되지 않고 xxx.user 파일에 저장됩니다. 따라서 MSBuild는 그것에 대해 알지 못합니다.

<!--build selection of projects--> 
<Project 
    ToolsVersion="3.5" 
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <ItemGroup> 
    <DevMachine Include="A\b.vcproj"/> 
    <DevMachine Include="B\b.vcproj"/> 
    <DevMachine Include="C\c.vcproj"/> 
    </ItemGroup> 

    <ItemGroup> 
    <BuildMachine Include="D\d.vcproj"/> 
    <BuildMachine Include="E\e.vcproj"/> 
    </ItemGroup> 

    <Target Name="All"> 
    <CallTarget Targets="MakeDevMachine"/> 
    <CallTarget Targets="MakeBuildMachine"/> 
    </Target> 

    <Target Name="MakeDevMachine"> 
    <VCBuild 
     Projects="@(DevMachine)" 
    /> 
    </Target> 

    <Target Name="MakeBuildMachine"> 
    <VCBuild 
     Projects="@(BuildMachine)" 
    /> 
    </Target> 

</Project> 

만 철수는 당신이 당신의 솔루션 파일과 동기화를 유지해야 할 것입니다 :

가장 좋은 방법은 예를 들어 사방을 구축 할 수 만 프로젝트를 포함하는 간단한 MSBuild에서 파일을 작성하는 것입니다.

1

가능한 해결 방법은 MSBuild 대신 devenv /build ConfigurationName file.sln을 직접 사용하는 것입니다.

그러나 솔루션에서 프로젝트를 언로드하면은 올바른 해결책이 아닙니다. 내 앞에있는 사람들이 말했듯이 빌드 머신에는 별도의 구성을 사용하십시오.

관련 문제