4

我将一个解决方案从 VS2008 转换为 VS2010 SP1,并将单元测试项目更改为针对 3.5 框架。除了必须在单元测试项目中修复一些引用之外,一切正常并且解决方案构建成功。大多数测试成功运行,但也有少数测试失败。失败的是使用私有访问器。就个人而言,我宁愿删除这些测试,因为我认为它们没有必要,但只要它揭示了 SP1 中的潜在错误,我想我会看看是否有人能找到解决方法。

运行测试时收到的错误消息是“此程序集由比当前加载的运行时更新的运行时构建,无法加载。” 据我所知,私有访问器程序集似乎是由 4.0 运行时构建的(很可能是通过 Microsoft.VisualStudio.QualityTools.UnitTestFramework),但由于 3.5 运行时是由 MSTest 加载的,因此会发生错误。

我尝试将 Microsoft.VisualStudio.QualityTools.UnitTestFramework 的参考更改为专门使用 9.0 版(目前是 10.1)。这会导致编译时错误,指出私有访问器程序集使用 Microsoft.VisualStudio.QualityTools.UnitTestFramework 的 10.0 版,该版本高于 9.0 版。

我已经删除了生成的私有访问器程序集并重新创建了它,但仍然有同样的问题。当 3.5 框架以单元测试项目为目标时,似乎有些东西与 VS2010 SP1 不同步。

这是其中一个单元测试的代码(同样,这不是一个非常有价值的测试,但这不是帖子的重点......):

    [TestMethod()]
    public void GetNullableCharValue_DBNull_ReturnsNull_Test()
    {
        object value = DBNull.Value;
        Nullable<char> expected = null;
        Nullable<char> actual;
        actual = RepositoryBase_Accessor.GetNullableCharValue(value);
        Assert.AreEqual(expected, actual);
    }
4

3 回答 3

3

我也遇到了这个问题。Visual Studio 2010 SP1 增加了对基于 .NET v3.5 的单元测试项目的支持;以前的单元测试被迫使用 .NET4。

关于这个主题有一个Microsoft Connect 错误,但它只是在我写这个答案的那天提交的,所以微软还没有有意义的回应。

我选择的解决方法是使用 Visual Studio 2008 工具链手动生成私有访问器程序集,并从单元测试项目中添加对其的手动引用。

步骤是:

1)从单元测试.csproj文件中删除自动生成的访问器:

<ItemGroup>
  <Shadow Include="Test References\Assembly.accessor" />
</ItemGroup>

2) 使用Publicize VS2008创建 v3.5 兼容的访问器程序集:

"%VS90COMNTOOLS%vsvars32.bat"
publicize Assembly.dll

3) 将程序集复制到源树文件夹,例如在文件夹下Accessors

copy Assembly_Accessor.dll ProjectDir\Accessors\Assembly_Accessors.dll

4) 使用 Visual Studio 界面添加访问器程序集作为对单元测试项目的引用:

Project -> Add Reference.. -> Browse...

5)构建您的解决方案Ctrl+Shift+B并运行您的测试。

您现在可以签入生成的程序集或在预构建事件中自动创建它。

于 2011-06-29T01:44:05.283 回答
1

当组件被签名和版本控制或存在访问器类时,此解决方案不起作用。

http://connect.microsoft.com/VisualStudio/feedback/details/677203/even-after-installing-vs2010-sp1-unit-tests-targeting-3-5-framework-fail-if-they-are-using-私人访问者

于 2011-09-06T13:31:15.287 回答
0

尝试按照以下步骤操作:http: //blogs.msdn.com/b/vstsqualitytools/archive/2010/12/19/how-to-re-target-unit-tests-to-net-framework-3-5-in -vs-2010-sp1.aspx

于 2011-03-22T20:15:44.807 回答