msbuild,如何设置环境变量?

in *_*eps 22 msbuild visual-c++

我试图使用项目文件设置环境变量(例如.vcxproj)

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

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

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

ogg*_*gre 30

从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>
Run Code Online (Sandbox Code Playgroud)

请注意,在MSBuild 14+中,AssemblyFile引用应该只是:

AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll"
Run Code Online (Sandbox Code Playgroud)

然后SetEnvironmentVariableTask可以从目标中使用:

<Target Name="SampleTarget" BeforeTargets="Build">
  <SetEnvironmentVariableTask Name="TEST_ENV_VAR" Value="$(MSBuildProjectName)" />
</Target>
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,在MSBuild 14中,`AssemblyFile`引用应该只是:`AssemblyFile ="$(MSBuildToolsPath)\ Microsoft.Build.Tasks.Core.dll">` (3认同)
  • 尝试Environment.SetEnvironmentVariable(Name,Value,EnvironmentVariableTarget.Machine)或Environment.SetEnvironmentVariable(Name,Value,EnvironmentVariableTarget.User).默认值为Environment.SetEnvironmentVariable(Name,Value,EnvironmentVariableTarget.Process) (2认同)
  • 如果在 .NET core 上使用 msbuild,则必须使用 [RoslynCodeTaskFactory](https://learn.microsoft.com/en-us/visualstudio/msbuild/msbuild-roslyncodetaskfactory)。它从 MSBuild 15.8 起可用。有些任务只需将“CodeTaskFactory”替换为“RoslynCodeTaskFactory”即可工作。 (2认同)

Pau*_*ood 13

在 MS Build 的最新版本(自 2016 年起)中,您可以简单地执行以下操作:

<Target Name="MyEnvironmentVariables">
    <Exec Command="A command that needs environment variables" EnvironmentVariables="HANDY_ENV_VAR_1=500;HANDY_ENV_VAR_2=A Useful Value"  />
</Target>
Run Code Online (Sandbox Code Playgroud)

确保用分号分隔变量。不过,您不需要尾随分号。


Nic*_*nik 5

有几件事:

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

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

  • 请附上代码示例,链接不可信 (3认同)