VisualStudio2012を使用して.NETFramework4.0をターゲットにし、4.0環境(Windows Server 2003)に展開したときにコードが正しく機能することを確認する必要があります。
Visual Studio 2012のマルチターゲティングは正しく機能しているようですが、mscorlib.dll
。他のフレームワークDLLを参照する場合、コンパイルの場合、たとえば4.0には存在しないタイプを参照するなどの適切なエラーが発生しますが、実行およびデバッグ中に4.5バージョンのDLLがロードされます。
これにより、4.5バージョンのフレームワークが行ったインプレースアップグレードの重大な変更を考慮して、コードが本番環境で正しく機能することを確認できなくなります。
MSDNにある4.0と4.5の違いのいくつかを実行することにより、マルチターゲティング機能をテストするためにいくつかの単体テストを行いました。テストは、テストしているフレームワークのバージョンを対象とした独自のプロジェクトに含まれています。すべてのテストに合格する必要があります。
MSCORLIBに対するテスト
List<string>
これらのテストは、次の場所にあるように正常に合格しmscorlib.dll
ます。
フレームワーク4.0:-パス-
[TestMethod]
public void List_Foreach_should_not_throw_if_list_is_modified() {
var list = new List<string> { "This", "here", "be", "a", "list", "of", "strings" };
list.ForEach((s) => {
if (s.Equals("be", StringComparison.OrdinalIgnoreCase)) {
list.Add(".");
}
});
}
フレームワーク4.5:-パス-
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public void List_Foreach_should_throw_if_list_is_modified() {
var list = new List<string> { "This", "here", "be", "a", "list", "of", "strings" };
list.ForEach((s) => {
if (s.Equals("be", StringComparison.OrdinalIgnoreCase)) {
list.Add(".");
}
});
}
他のフレームワークDLLに対してテストします
ただし、これらのタイプはで検出され、4.5バージョンが常にロードされるため、これらのテストは正しく機能しません(4.5のものは合格し、4.0のものは合格しません)。System.ComponentModel.Composition.dll
フレームワーク4.0-失敗し、4.5で予期される例外をスローします-
[TestMethod]
public void Should_be_able_to_create_a_serializer_for_MEF_catalogs()
{
var catalog = new AggregateCatalog();
var serializer = new XmlSerializer(typeof(AggregateCatalog));
}
フレームワーク4.5-パス-
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public void Should_not_be_able_to_create_a_serializer_for_MEF_catalogs()
{
var catalog = new AggregateCatalog();
var serializer = new XmlSerializer(typeof(AggregateCatalog));
}
これは設計どおりですか?4.0バージョンのmscorlibがロードされているが、他のすべてのアセンブリの4.5バージョンがロードされていることを考えると、互いに素であるように見えます。
希望する機能を取得する方法はありますか?
アップデート
これが私が使用しているソリューション/プロジェクトです。