なので、作ってみた。
<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>
0 件のコメント:
コメントを投稿