msbuild,如何设置环境变量?

时间:2013-01-10 21:53:06

标签: visual-c++ msbuild

我正在尝试使用项目文件(例如.vcxproj)

设置环境变量

我查看了属性函数,但它似乎没有这样的功能。

我知道有一种方法可以检索环境变量,但无法找到如何设置它。

我觉得应该有办法在项目文件中设置环境变量。

3 个答案:

答案 0 :(得分:27)

自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引用应该只是:

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

然后可以从目标中使用SetEnvironmentVariableTask

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

这比为小型MSBuild任务创作单独的.DLL要方便得多。

答案 1 :(得分:5)

有几件事:

1)如果您只在MSBuild的上下文中使用该变量,那么您可以使用标准的MSBuild变量而不是尝试设置环境变量

2)如果确实需要设置一个env var,那么它不是一个开箱即用的东西。您需要编写自定义任务,然后在项目文件中使用它。这是MSDN线程的链接,概述了如何执行此操作 http://social.msdn.microsoft.com/forums/en-US/msbuild/thread/0fb8d97d-513e-4d37-8528-52973f65a034

答案 2 :(得分:0)

您可以考虑将环境变量写为文本文件(.cmd),作为SET XXX = $(XXX)行的序列。然后在命令窗口中执行.cmd。

e.g。使用所有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。