古いライブラリを使ったプロジェクトの単体テストコードを書いていてハマったお話。

前提知識

古いライブラリを現在の環境で動かそうとすると下記の例外が出る。

混合モード アセンブリはバージョン v2.0.50727 のランタイムに対して作成されており、追加の構成情報がないと 4.0 ランタイムでは読み込めません。

解決策は実行ファイルのマニフェスト(xxx.exe.configなど)に混合モードを許可する旨を記述すること。

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

今回の問題

このプログラムの単体テストをしていて例外に遭遇。

  1. ぐぐる
  2. 「マニフェスト書けばいいのかー」
  3. 書く
  4. はい例外ー
混合モード アセンブリはバージョン v2.0.50727 のランタイムに対して作成されており、追加の構成情報がないと 4.0 ランタイムでは読み込めません。

解決策

この場合、実行ファイルはこのプログラムではなく MsTest。
マニフェストどこー?

Visual Studio 2010*1
  • C:Program Files (x86)Microsoft Visual Studio 10.0Common7IDEMsTest.exe.config
Visual Studio 2012*2
  • C:Program Files (x86)Microsoft Visual Studio 11.0Common7IDECommonExtensionsMicrosoftTestWindowvstest.executionengine.x86.exe.config

上記のファイルに useLegacyV2RuntimeActivationPolicy を記述すればOKです。

参考

この問題の解決に以下のサイトを参考にさせて頂きました。

  • NKY-TECH. ソフトウェア開発部: .NET Framework 4.0で混合モードのアセンブリを読み込めない旨のエラー
  • ALM - Team Foundation Server and More: Enabling logging on MSTest.exe

*1:Professional環境で確認しました。

*2:Express環境で確認しました。