使用 .net 4.0 测试程序集测试 .net 3.5 程序集时的风险有多大

Posted

技术标签:

【中文标题】使用 .net 4.0 测试程序集测试 .net 3.5 程序集时的风险有多大【英文标题】:How big is the risk when testing a .net 3.5 Assembly using a .net 4.0 test assembly 【发布时间】:2012-01-31 12:30:18 【问题描述】:

我意识到 Visual Studio 2010 sp1 现在允许测试项目以 3.5 为目标。 然而,由于种种原因,我并不完全理解,我们的测试项目仍然以 dot net 4.0 为目标。

一般问题在标题中。风险有多大?

具体来说,这大概意味着测试将在 CLR v4 中运行,而我们的许多客户将使用 CLR v2。 此外,测试似乎使用了 v4 库组件(例如 System.Data),即使应用程序是针对 v2 构建的。

一个方法 (System.Data.SqlClient.SqlBulkCopy) 在 v2 中包含一个错误,该错误已在 v4 中修复。我们的测试错过了这一点。

撇开 CLR 不谈,我如何强制我的应用程序使用某个库的 v2,即使它被 v4 测试程序集引用(加载到应用程序域中)?我一直在尝试一个例子,但似乎无法实现。我的 3.5 应用程序引用 System.Data v2,并将程序集版本号回显到控制台。从 3.5 测试程序集调用时,版本为 2.0。从 4.0 测试程序集,版本是 4.0。 (“特定版本”在我的应用程序的引用中设置为 true)

【问题讨论】:

关于引用不同版本的框架库的问题在这里回答:***.com/questions/9081319/… 【参考方案1】:

这应该可以满足您的需求:

In-Process Side-by-Side Execution

【讨论】:

【参考方案2】:

我对此没有答案,因此我们决定通过将我们的测试项目恢复到 dotnet 3.5 来回避这个问题。这意味着测试在 CLR 2.0 下运行。但是,我们仍然使用 VS2010 的 MSTest,并且仍然能够使用漂亮的 2010 功能,例如测试类别和数据驱动测试。

【讨论】:

以上是关于使用 .net 4.0 测试程序集测试 .net 3.5 程序集时的风险有多大的主要内容,如果未能解决你的问题,请参考以下文章

ReflectionTypeLoadException 从 .Net 4.0 应用程序加载 .Net 4.0 程序集,而 2.0 可以工作

安装 .NET 4.5 真的会取代 .NET 4.0 程序集吗?

.NET 程序集单元测试工具 SmokeTest 应用指南

.NET 程序集单元测试工具 SmokeTest 应用指南

.NET 4.0 NGEN x64 程序集上的符号解析不起作用

是否可以从 .NET 测试 COM 公开的程序集?