KatsuYuzuのブログ

.NET の開発をメインとした日記です。

MsTest で .NET2.x 以前向けアセンブリを使った混合モードで単体テストを行う方法

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

前提知識

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

混合モード アセンブリはバージョン 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.0\Common7\IDE\MsTest.exe.config
Visual Studio 2012*2
  • C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.x86.exe.config

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

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

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