サンプルとして、TargetFrameworkVersionの先頭に"NET_"をつけて、TestPropertyに入れて、DefineConstantsに追加した。
<None Include="App.config" />
</ItemGroup>
<PropertyGroup>
<TestProperty>NET_$(TargetFrameworkVersion.Replace("v","").Replace(".",""))</TestProperty>
<DefineConstants>$(DefineConstants);$(TestProperty)</DefineConstants>
</PropertyGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the ta ....
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<Target Name="Build">
<Message Text="テストプロパティ = $(TestProperty)" />
<Message Text="ビルド定数 = $(DefineConstants)" />
</Target>
</Project>
このように、Visual Studioのコマンドプロンプトから、MsBuildを実行すると、Messageタスクが出力される。
このNET_45というシンボルは、ちゃんとVisualStudioで使える。
今度はターゲットフレームワークをNet4.0にすると、シンボル名もNET_40になる。
当然、NET_45シンボルは無いので、#if で括った部分は無効になる。
2014.06.18追記
csprojで使えるメソッドとかの説明
http://msdn.microsoft.com/ja-jp/library/dd633440.aspx




0 件のコメント:
コメントを投稿