2013-01-10 76 views
18

プロジェクトファイル(例:.vcxproj)を使用して環境変数を設定しようとしていますmsbuild、環境変数の設定方法は?

プロパティー機能を見ましたが、そのような機能はないようです。

私は環境変数を取得する方法はあるが、設定方法が見つからないことを知っています。

プロジェクトファイルに環境変数を設定する必要があるような気がします。

答えて

4

物事のカップル:

1)あなたが唯一のMSBuildのコンテキストで変数を使用している場合は、あなただけの代わりに、環境変数

2を設定しようとしているの標準のMSBuild変数を使用することができます)env varを設定する必要がある場合は、まあ、それはすぐに使えるものではありません。カスタムタスクを作成し、それをプロジェクトファイルに活用する必要があります。これを行う方法の概要を説明する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///テンプレートを使用しているt4テンプレート/ 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

環境変数を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を呼び出します。

関連する問題