読者です 読者をやめる 読者になる 読者になる

.NET 4.5 betaをインストールするとmonodevelopでMono for Android, PSSuiteのプロジェクトがビルドしなくなる(らしい)

(表題)のような問題が生じて、monodevelopからプロジェクトがビルド出来なくなっているようです。

https://bugzilla.xamarin.com/show_bug.cgi?id=5597

http://community.eu.playstation.com/t5/General/please-need-help-with-error/td-p/16258275

Mono for AndroidとPSSuiteと限定しているのは、これらのみがMonoDevelopMSBuildを使ったビルドエンジンを利用しているためです(PSSuiteはクローズドソースなので推測ですが)。他のプロジェクトタイプの場合は、MonoDevelopは従来から独自に持っているビルドエンジンを利用してプロジェクトをビルドしています。

.NET 4.5 betaは、VS2012がインストールされれば一緒にインストールされることになるのですが、これは.NET 4.0のアセンブリを勝手に上書きするんですね。(こうやって内部的に非互換な問題が生じることにMSは気付かなかったというわけですね。) .NET 4.0上で問題なく動作していたものが、VS2012RCがインストールされると動かなくなるのは、そこに理由があります。side by sideって一体どうなっちゃったの…?

ということで、発生原因と症状は分かるのですが、回避方法と対処法は分かっていません(分かっていたらbugfixできるし…)。とりあえず、VS2012を維持しておきたい人は、Mono for AndroidのプロジェクトはVS2010でビルドするようにするしかありません。PSSuiteはまだVSでビルド出来ないのであきらめるしかないような気がします。

まあtransientな問題でいずれ修正されるとは思いますが、ハマりどころなので一応まとめておきました。

(ちなみに.NET 4.5がエンバグしたのが問題なんだからということで実行ランタイムを「デフォルト ランタイム」からMono 2.11を選んで実行しても、MSBuildサポートのファイルがmono環境にインストールされているわけではないので失敗します。そういう回避策は通用しません。)

追記: MSのMSBuildチームの開発者がstackoverflowで回答しています(すばらしい)。どうやら.NET 4.5に移行した時、4.0互換のAPIだけは残したけど、実際のコードは以前のアプリケーションコードが利用出来るかどうかを十分にテストしていなかった、ということみたいです(まあそうでしょうなあ。このAPIを使っているのmonodevelopとせいぜいsharpdevelopくらいなんじゃないのかな)。そんなわけで.NET 4.5の正式版が出る頃には直っている期待がもてそうです。それまでのmonodevelop側は…MSBuildの新しいAPIの実装がないので、ちょっとやっかいなことになりそう。

追記2: monodevelopは次のバージョンに修正が含まれます。.NET上で動いているときはMSBuildの新しいAPIを使い、mono上では現状のまま問題なく動かすとか。