2013-01-10 3 views
18

프로젝트 파일 (예 : .vcxproj)을 사용하여 환경 변수를 설정하려고합니다.msbuild, 환경 변수 설정 방법은 무엇입니까?

속성 기능을 살펴 보았지만 이러한 기능이없는 것 같습니다.

환경 변수를 검색하는 방법이 있지만 설정 방법을 찾을 수 없다는 것을 알고 있습니다.

프로젝트 파일에 환경 변수를 설정하는 방법이 있어야한다고 생각합니다.

답변

4

몇 가지 :

1) 만 MSBuild에서의 맥락에서 변수를 사용하는 경우, 당신은 단지 대신 환경 변수

2를 설정하려고의 표준은 MSBuild 변수를 사용할 수 있습니다) 만약 env var을 설정해야한다면, out-of-box 일은 아닙니다. 사용자 정의 작업을 작성한 다음 프로젝트 파일에 활용해야합니다. 이렇게하는 방법을 설명하는 MSDN 스레드에 대한 링크가 있습니다.
http://social.msdn.microsoft.com/forums/en-US/msbuild/thread/0fb8d97d-513e-4d37-8528-52973f65a034

+0

답변 해 주셔서 감사합니다. –

+1

코드 샘플을 포함 시키십시오. 링크를 신뢰할 수 없습니다. – Rbjz

23

코딩 된 작업은 MSBuild v4.0부터 프로젝트 파일에 바로 적용 할 수 있습니다. 이처럼 :

<UsingTask 
    TaskName="SetEnvironmentVariableTask" 
    TaskFactory="CodeTaskFactory" 
    AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v$(MSBuildToolsVersion).dll"> 

    <ParameterGroup> 
    <Name ParameterType="System.String" Required="true" /> 
    <Value ParameterType="System.String" Required="true" /> 
    </ParameterGroup> 

    <Task> 
    <Using Namespace="System" /> 
    <Code Type="Fragment" Language="cs"> 
     <![CDATA[ 
     Environment.SetEnvironmentVariable(Name, Value); 
     ]]> 
    </Code> 
    </Task> 

</UsingTask> 

MSBuild를 14+에서 AssemblyFile 기준은해야하는 것으로 :

<Target Name="SampleTarget" BeforeTargets="Build"> 
    <SetEnvironmentVariableTask Name="TEST_ENV_VAR" Value="$(MSBuildProjectName)" /> 
</Target> 

많이있다 :

AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll" 

SetEnvironmentVariableTask 다음 대상에서 사용할 수 있습니다 작은 MSBuild 작업을 위해 별도의 .DLL을 작성하는 것보다 편리합니다.

+0

시도해보십시오. Visual Studio 2012에서이 기능을 사용할 수 없습니다. 그러나 솔루션을 찾을 수있었습니다 (http://stackoverflow.com/). 질문/5886938/can-reference-dependency-t4-template-when-using-transformonbuil/20688714 # 20688714). –

+0

이것은 주어진 대상의 컨텍스트 내에서만 작동하는 것으로 보입니다. 다른 대상에서 env var를 읽으려고하면 더 이상 존재하지 않습니다. – gschuager

+1

Environment.SetEnvironmentVariable (Name, Value, EnvironmentVariableTarget.Machine) 또는 Environment.SetEnvironmentVariable (Name, Value, EnvironmentVariableTarget.User)을 사용해보십시오. 기본값은 Environment.SetEnvironmentVariable (Name, Value, EnvironmentVariableTarget.Process)입니다. – herskinduk

0

환경 변수를 텍스트 파일 (.cmd)에 SET XXX = $ (XXX) 줄의 시퀀스로 쓰는 것이 좋습니다. 그런 다음 명령 창에서 .cmd를 실행하십시오.

모든 SET 명령을 사용하여 ItemGroup을 정의한 다음 Task 'WriteLinesToFile'을 사용하여 각 항목을 .cmd 텍스트 파일의 행에 씁니다.

<ItemGroup> 
    <BuildEnvItem Include="REM This file is auto generated. Do not edit" /> 
    <BuildEnvItem Include="SET TEST_ENV_VAR=$(TEST_ENV_VAR)" /> 
    <!-- add more as needed --> 
<ItemGroup> 

<Target Name="DefineBuildEnvironmentVariables"> 
    <WriteLinesToFile File="Build_env.cmd" Lines="@(BuildEnvItem)" Overwrite="true" Encoding="Unicode"/> 
</Target> 

이것은 msbuild를 사용하는 기존 .cmd가있는 상황에서 유용 할 수 있습니다. 초기 .cmd는 msbuild를 사용하여 Build_env.cmd를 생성 한 다음 계속하기 전에 Build_env.cmd를 호출합니다.