我想使用项目文件设置环境变量(例如.vcxproj)msbuild,如何设置环境变量?
我看着属性函数,但它似乎没有这样的功能。
我知道有一种方法来检索环境变量,但找不到如何设置它。
我觉得应该有办法在项目文件中设置环境变量。
我想使用项目文件设置环境变量(例如.vcxproj)msbuild,如何设置环境变量?
我看着属性函数,但它似乎没有这样的功能。
我知道有一种方法来检索环境变量,但找不到如何设置它。
我觉得应该有办法在项目文件中设置环境变量。
几件事情:
1)如果你只使用的MSBuild的环境变量,那么你可以使用,而不是试图设置环境变量
2标准的MSBuild变量)如果需要设置一个env var,那么它不是一个开箱即用的东西。您需要编写一个自定义任务,然后在项目文件中利用它。这是一个MSDN线程的链接,概述了如何做到这一点。
http://social.msdn.microsoft.com/forums/en-US/msbuild/thread/0fb8d97d-513e-4d37-8528-52973f65a034
从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更方便。
尽我所能,我无法得到这与Visual Studio 2012.然而,我能找到一个解决方案[这里](http://stackoverflow.com/问题/ 5886938 /不能参考依赖性组件式-T4-模板时-使用-transformonbuil/20688714#20688714)。 –
这似乎只在给定目标的情况下才起作用;当我试图从另一个目标读取env var时,它不存在了 – gschuager
尝试Environment.SetEnvironmentVariable(Name,Value,EnvironmentVariableTarget.Machine)或Environment.SetEnvironmentVariable(Name,Value,EnvironmentVariableTarget.User)。默认值是Environment.SetEnvironmentVariable(名称,值,EnvironmentVariableTarget.Process) – herskinduk
您可能会考虑将环境变量作为SET XXX = $(XXX)行的序列写入文本文件(.cmd)。然后在命令窗口中执行.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。
谢谢你的回答! –
请包括一个代码示例,链接不可信 – Rbjz