色々探したが、よい物が見つからなかった。
なので、作ってみた。
<None Include="App.config" />
</ItemGroup>
<Import Project="$(SolutionDir)NetFrameworkVersion.targets" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PreBuildEvent>
これで、以下のシンボルが定義される。
- NET_20
- NET_30
- NET_35
- NET_40
- NET_45
- NET_451
- NET_20_OR_GREATER
- NET_30_OR_GREATER
- NET_35_OR_GREATER
- NET_40_OR_GREATER
- NET_45_OR_GREATER
このファイルを、ソリューションフォルダに置くのを忘れずに。
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<!-- NET Frameworkのバージョンに関する定数を定義する。 -->
<!-- NET_20, NET_30, NET_35, NET_40, NET_45, NET_451, -->
<!-- NET_20_OR_GREATER, NET_30_OR_GREATER, NET_35_OR_GREATER, NET_40_OR_GREATER, NET_45_OR_GREATER -->
<!-- メジャーバージョン、マイナーバージョン、ビルド番号の結果を入れる -->
<VerMajor>0</VerMajor>
<VerMinor>0</VerMinor>
<VerBuild>0</VerBuild>
<!-- Pos1:最初のピリオドの位置 / Pos2:次のピリオドの位置 / Pos1n,Pos2nは、それぞれのPosに+1している -->
<Pos1>-1</Pos1>
<Pos1n>-1</Pos1n>
<Pos2>-1</Pos2>
<Pos2n>-1</Pos2n>
<!-- v4.5.1とかv2.0とか入っているので、まずは'v'を除去 -->
<Tmp>$(TargetFrameworkVersion.Replace('v', ''))</Tmp>
<!-- ピリオドがなければPos1に-1が入るので、Pos2に突入させない-->
<Pos1>$(Tmp.IndexOf("."))</Pos1>
<Pos1n>$([MsBuild]::Add($(Pos1), 1))</Pos1n>
<Pos2 Condition="0 <= $(Pos1)">$(Tmp.IndexOf(".", $([MsBuild]::Add($(Pos1), 1))))</Pos2>
<Pos2n>$([MsBuild]::Add($(Pos2), 1))</Pos2n>
<!-- 最初のピリオドがあれば、そこまでを VerMajor にする。ピリオドがなければ、全てを VerMajor にする。-->
<VerMajor Condition="0 <= $(Pos1)">$(Tmp.SubString(0, $(Pos1)))</VerMajor>
<VerMajor Condition="0 > $(Pos1)">$(Tmp)</VerMajor>
<!-- 次のピリオドがあれば、 最初のピリオドから次のピリオドまでを、VerMinorにする。なければ、残りをVerMinorにする-->
<VerMinor Condition="0 <= $(Pos2)">$(Tmp.SubString($(Pos1n), $([MsBuild]::Subtract($(Pos2), $(Pos1n)))))</VerMinor>
<VerMinor Condition="0 > $(Pos2) And 0 != $(Pos1n)">$(Tmp.SubString($(Pos1n)))</VerMinor>
<!--2つ目のピリオドがあれば、そこから後ろを VerBuild にする-->
<VerBuild Condition="0 <= $(Pos2)">$(Tmp.SubString($(Pos2n)))</VerBuild>
<!-- VerMajor,VerMinor,VerBuildを用いて、定数を作成する。 -->
<DefineConstants>$(DefineConstants);NET_$(VerMajor)$(VerMinor)$(VerBuild)</DefineConstants>
<DefineConstants Condition="2 <= $(VerMajor)">$(DefineConstants);NET_20_OR_GREATER</DefineConstants>
<DefineConstants Condition="3 <= $(VerMajor)">$(DefineConstants);NET_30_OR_GREATER</DefineConstants>
<DefineConstants Condition="3 <= $(VerMajor) And 5 <= $(VerMinor)">$(DefineConstants);NET_35_OR_GREATER</DefineConstants>
<DefineConstants Condition="4 <= $(VerMajor)">$(DefineConstants);NET_40_OR_GREATER</DefineConstants>
<DefineConstants Condition="4 <= $(VerMajor) And 5 <= $(VerMinor)">$(DefineConstants);NET_45_OR_GREATER</DefineConstants>
</PropertyGroup>
</Project>