2011-09-13 1 views
3

나는 우리의 CI 과정에 대한 MSBuild에서 스크립트를 만들고이 스크립트에서 나는 솔루션을 컴파일하기 위해 MSBuild에서 작업을 사용MSBuild 4.0에서 C# 프로젝트 파일의 MSBuild 작업에서 확장 할 속성 이름을 전달하는 방법?

<PropertyGroup> 
    <MyOutPath>Output</MyOutPath> 
</PropertyGroup> 

<MSBuild 
    Projects="MySolution.sln" 
    Targets="Clean;Rebuild" 
    Properties="OutputPath=$(MyOutPath)\%24(AssemblyName)"> 
</MSBuild> 

내가 C# 프로젝트 파일이

  • 같은 출력 경로를 사용하려면를 프로젝트에 대한 출력 \의 MyAssemblyName1는
  • 출력 \ MyAssemblyName2 프로젝트가 MyAssemblyName2에 대한

는 AS를 MyAssemblyName1 semblyName 속성은 C# 프로젝트 파일에서 가져온 것으로 프로젝트를 빌드 할 때 OutputPath 속성에서 확장되도록하고 싶습니다.

지금, % 24 (AssemblyName)은 내가 원한이 아닌 파일 시스템에 Output \ $ (AssemblyName)을 생성합니다.

$ (AssemblyName)을 사용하면 "상위"MSBuild 파일에서 아무 것도 확장되지 않습니다.

나중에 대상 프로젝트 파일에서 AssemblyName 속성의 해결을 연기 할 수있는 방법이 있습니까?

또한 CI 시스템의 영향을 최소화하려면 .csproj 파일을 수정하고 싶지 않습니다.

답변

2

Import element을 사용하여 .csproj 프로젝트 파일을 직접 MSBuild 스크립트로 가져올 수 있습니다. 1MSBuildEmitSolution 환경 변수를 설정하여 convert it to an MSBuild project file

<Import Project="MyProject.csproj" /> 
<Message Text="The assembly name is $(AssemblyName)" /> 

당신이 .sln 솔루션 파일의 내용을 가져와야하는 경우는, 먼저해야하고에 MSBuild를 실행 :이 방법 당신은 직접 AssemblyName 속성을 참조 할 수 솔루션 파일. 이것은 전에 설명처럼 당신이 다음 스크립트에 가져올 수 MySolution.sln.proj 파일을 생성합니다

<SetEnv Name="MSBuildEmitSolution" Value="1" /> 
<MSBuild Projects="MySolution.sln" Targets="Build" /> 
<Import Project="MySolution.sln.proj" /> 
+0

글쎄, 나는 여러 프로젝트 파일과 사전에 알려져 있지 않은 모든 프로젝트 파일을 참조하는 해결책을 가지고 있습니다. 가져 오기 지원 항목이 있습니까? –

+0

또한 모든 프로젝트가 반드시 포함되는 것은 아니라는 솔루션을 가지고 있으므로 올바른 프로젝트 파일을 처리하기 위해 sln 파일을 구문 분석해야합니다. –

+0

MSBuild 4.0을 사용하는 경우 [가져 오기] (http://msdn.microsoft.com/en-us/library/92x05xfs.aspx) 요소는 실제로 와일드 카드를 지원하므로''특정 디렉토리의 모든 프로젝트 파일을 가져옵니다. –

관련 문제