現象
.NET Framework 3.5向けに作ったプログラムを、.NET Framework 2.0と.NET Framework 4.0がインストールされたWindows Vista環境で動作させると途中で落ちる。
エラーの詳細は以下のようなもの。
説明:
Stopped working
問題の署名:
問題イベント名: CLR20r3
問題の署名 01: test.exe
問題の署名 02: 1.0.0.0
問題の署名 03: 52e6fd4a
問題の署名 04: test
問題の署名 05: 1.0.0.0
問題の署名 06: 52e6fd4a
問題の署名 07: 23c
問題の署名 08: 33
問題の署名 09: System.TypeInitialization
OS バージョン: 6.0.6002.2.2.0.256.6
ロケール ID: 1041
プライバシーに関する声明をお読みください:
http://go.microsoft.com/fwlink/?linkid=50163&clcid=0x0411
app.configには以下の記載。
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v2.0.50727" sku="Client" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
</startup>
原因
上記のapp.configに従い.NET Framework 2.0で動作するものの、.NET Framework 3.5から用意されたライブラリは存在しないため。
.NET Framework 2.0で動作できるならば動作するので途中までは動くが、.NET Framework 3.5が必要なメソッド等(今回はLINQだった)を呼ぶと、アセンブリが無いので落ちる。
対応
app.configのsupportedRuntimeの記載順序を変えて、.NET Framework 4.0で優先的に動かせば大丈夫。
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
<supportedRuntime version="v2.0.50727" sku="Client" />
</startup>