2014-06-11 2 views
9

프로젝트의 빌드 속성에 설정된 조건부 컴파일 기호를 읽어야하는 MSBuild 스크립트가있는 상황에 처해 있습니다. MSBuild 스크립트 파일에 다음 코드가 있습니다.MSBuild를 사용하여 프로젝트 속성에 조건부 컴파일 기호를 추가하는 방법은 무엇입니까?

<PropertyGroup> 
    <DefineConstants>$(DefineConstants);INTER</DefineConstants> 
    </PropertyGroup> 


    <Target Name="Compile"> 
    <Message Text="$(DefineConstants)"/> 
    <MSBuild Projects="CustomAssemblyInfo.csproj" Targets="Rebuild" Properties="DefineConstants=$(DefineConstants)" /> 
    </Target> 

나는 $ (DefineConstants); 설정되어있는 조건부 컴파일 기호의 값을 포함 할 것이고이 경우 INTER과 같은 값을 추가 할 수 있습니다. 그러나 어떻게 든 프로젝트 속성에 설정된 값은 여기에 전달되지 않습니다. 아무도 내가 누락 된 부분에 도움을받을 수 있습니까? MSBuild 작업의 Properties 속성을 통해 전달

+0

모르겠지만, 아마도 또한 당신은 어떻게에서 해당 속성을 설정하는 * * 우리에게 좋은 생각이 될 수 없음 프로젝트 속성 ...? – stakx

+0

다음과 같은 방법으로 전달합니다. http://tinypic.com/r/1qgzle/8 –

+0

이것은 INTER을 의미하며, INTER은 $ (DefineConstants)에 전달되는 것이 없음을 의미합니다. –

답변

14

속성은 명령 줄에서 /p:와 함께 전달 된 것과 같은 글로벌 속성을 불리는 것입니다. 그들은 무조건으로 정의 된 다른 속성이나 환경 변수보다 우선합니다. 즉 .csprojDefineConstants입니다. 자신의 DefineConstants 먼저 당신이 그래서 <DefineConstants>TRACE;DEBUG;$(Constants)</DefineConstants>DefineConstants을 재정의하고 대신 MSBuild를 /은 NAnt 스크립트에서 Constants을 통과 할 프로젝트의 속성 창에서 $(Constants) 같은 추가 방지하기 위해, 그것은 나중에 .csproj에서 설정되는 것을 방지 전달하여

.

편집 : @ sǝɯɐs 주석 사항에 따라 아래

https://i.imgur.com/jZiVy7J.png

enter image description here

+0

감사합니다 llya,하지만 난 왜 단순히 값을 msbuild 파일에서 프로젝트 속성에서 전달 읽을 수 없습니다 궁금해? –

+0

제 경우에는 방금 전달 된 내용을 읽은 다음 msbuild에서 더 많은 상수를 추가하고 싶습니다. 또한 MSBuild 용으로 별도의 XML 파일을 가지고 있으므로 csproj 자체를 변경하지는 않습니다. –

+0

@AfrazAli 사용자 정의 스크립트에서 프로젝트 파일로 이동하고 다른 방법으로 이동하지 않으므로 읽을 수 없습니다. 아직로드되지 않았고 아직 평가되지 않았습니다. XML 또는 Microsoft.Build.Evaluation을 사용하여 텍스트로 읽고 구문 분석을 시도해 볼 수 있습니다. 그렇지 않으면 프로젝트 속성으로 이동하여 '조건부 컴파일 기호'에 $ (자리 표시 자)를 추가해야합니다. MSBuild, NAnt 또는 .bat 스크립트에서 가져옵니다. –