27

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

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

環境変数を取得する方法があることは知っていますが、設定方法が見つかりませんでした。

プロジェクトファイルに環境変数を設定する方法が必要だと思います。

4

4 に答える 4

36

コード化されたタスクは、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 を作成するよりもはるかに便利です。

于 2013-11-16T03:44:44.737 に答える
6

いくつかのこと:

  1. MSBuild のコンテキストでのみ変数を使用している場合は、環境変数を設定する代わりに、標準の MSBuild 変数を使用できます。

  2. 環境変数を設定する必要がある場合は、すぐに使用できるものではありません。カスタム タスクを作成し、それをプロジェクト ファイルで活用する必要があります。これを行う方法の概要を示す MSDN スレッドへのリンクを次に示します。
    MSBuildファイルで環境変数を設定するには?

于 2013-01-11T03:41:50.163 に答える
2

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

于 2016-03-01T00:51:49.120 に答える