概要
環境変数によってC#コードを変更したいこともあるかなと思います。
// 環境変数「HOGE_VERSION」が「1.0.0」以上の場合に「HOGE_1_0_0_OR_NEWER」を定義したい #if HOGE_1_0_0_OR_NEWER Console.WriteLine("v1.0.0以上のバージョンです。"); #else Console.WriteLine("v1.0.0未満のバージョンです。"); #endif
MSBuild
を使えば実現できるのですが、その方法を紹介したいと思います。
やり方
まず.csproj
で環境変数を受け取るには$(HOGE_VERSION)
で取得することができます。
<!-- HOGE_VERSIONが定義されていなければデフォルト値を利用するように定義する --> <PropertyGroup> <HogeVersion Condition="'$(HOGE_VERSION)' != ''">$(HOGE_VERSION)</HogeVersion> <HogeVersion Condition="'$(HOGE_VERSION)' == ''">1.0.0</HogeVersion> </PropertyGroup>
HOGE_1_0_0_OR_NEWER
を定義するにはDefineConstants
を利用すればできるのですが、Condition
を利用して条件をつけます。
<!-- HogeVersionが1.0.0以上のときはHOGE_1_0_0_OR_NEWERを定義する。セマンティックバージョニングでの比較が可能です --> <DefineConstants Condition=" '$(HogeVersion)' >= '1.0.0' ">HOGE_1_0_0_OR_NEWER</DefineConstants>
実験
#if HOGE_1_0_0_OR_NEWER Console.WriteLine("v1.0.0以上のバージョンです。"); #else Console.WriteLine("v1.0.0未満のバージョンです。"); #endif
<PropertyGroup> <!-- HOGE_VERSIONが定義されていなければデフォルト値を利用するように定義する --> <HogeVersion Condition="'$(HOGE_VERSION)' != ''">$(HOGE_VERSION)</HogeVersion> <HogeVersion Condition="'$(HOGE_VERSION)' == ''">1.0.0</HogeVersion> <!-- HogeVersionが1.0.0以上のときはHOGE_1_0_0_OR_NEWERを定義する。セマンティックバージョニングでの比較が可能です --> <DefineConstants Condition=" '$(HogeVersion)' >= '1.0.0' ">HOGE_1_0_0_OR_NEWER</DefineConstants> </PropertyGroup>
# bash/zshではなくPowerShellです(PowerShell教なので) > $env:HOGE_VERSION = "0.8.0" > $env:HOGE_VERSION 0.8.0 > dotnet run v1.0.0未満のバージョンです。 > $env:HOGE_VERSION = "1.8.0" > $env:HOGE_VERSION 1.8.0 > dotnet run v1.0.0以上のバージョンです。