我想使用項目文件設置環境變量(例如.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