MSBuildを使ってクロスターゲットビルド

(Msbuild .net version target)
常に最新の.Net環境を使う事ができればいいのですが、どーしても未だに.Net3.5の環境とか残っています。
もちろん、最新の4.5.2の環境もあります。

そんな時どうします?

1つは、ターゲットランタイム別にプロジェクトを作成してリンクファイルでCSファイルを共有する方法。
ちょっと手間はかかりますが、バージョン別に新機能を盛り込めたり、一般的な方法だと思います。

とは別にMsBuilsを使用してバージョンを指定しビルドすることも可能です。

そもそも.Netバージョンってどこで決まるの?

正確には、ターゲットフレームワークバージョンといいます。
VisualStudio上で確認
f:id:orzmakoto:20150517011731p:plain

csprojファイルで確認
f:id:orzmakoto:20150517012020p:plain

VisualStudioでビルドしてできたDLLをデコパイルしてみる
f:id:orzmakoto:20150517013334p:plain

な感じ。
4.5ってなってますね。

Msbuildでターゲットフレームワークバージョンを指定する

ターゲットフレームワークバージョンを4.0に変更してビルドしてみます。

SET MSBUILD="C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe"

%MSBUILD% ClassLibrary1.csproj /p:TargetFrameworkVersion=v4.0 /p:Configuration=Release /t:Rebuild

/p:TargetFrameworkVersion=v4.0
ビルドパラメーターでTargetFrameworkVersionを指定します。

ビルドしてできたDLLをデコパイルしてみる
f:id:orzmakoto:20150517142438p:plain

ちゃんと4.0になっていますね。
(∩´∀`)∩ワーイ

ただ、この方法だと、開発時に4.0と4.5での言語バージョンを意識しないといけません。
4.5で導入されたasync/awaitを使用していると当然ですが、4.0でビルドした時には構文エラーになります。

そろそろ4.0は卒業したい。
まだ3.5もやっている。



ちなみに、デコンパイラはJustDecompileを使用しています。www.telerik.com
ILSpyも軽量シンプルでいいですがこっちのほうが好きです。