我有一个兼容性以后的项目碰巧调用COM,我有一些单元测试。当我从本地机器运行这些测试时,一切都很顺利。
但是当我的团队的构建服务器上运行这些测试时,我收到以下错误:
类初始化方法 Foo.Bar.Baz.Initialize 扔了例外。 System.Runtime.InteropServices.InvalidComObjectException: System.Runtime.InteropServices.InvalidComObjectException:COM对象 已经与其基础RCW分离的不能使用..
我在2005-2008时间框架内看到过对Visual Studio早期版本的这类问题的一些讨论。但单位测试基础设施在2012年的时间框架内完全被替换。大多数解决方案似乎都涉及编辑“.testsettings”文件,而该项目没有。
我正在使用Visual Studio 2012 Update 1进行开发,而构建服务器和TFS实例正在运行TFS 2010 SP1。
答案 0 :(得分:0)
原因是构建服务器上的TFS 2010 Team Tools使用的是Visual Studio 2010测试位。
我创建了一个包含以下内容的.testsettings
文件,并将其签入TFS:
<?xml version="1.0" encoding="UTF-8"?>
<TestSettings name="Local" id="2010983b-bdae-4cf9-910d-08bad14e68cf"
xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<Description>This forces tests to run as a MTA. (Visual Studio 2012 just works;
2010 completely explodes on the build server)</Description>
<Deployment enabled="false" />
<Execution>
<TestTypeSpecific />
<AgentRule name="Execution Agents">
</AgentRule>
<ExecutionThread apartmentState="MTA" />
</Execution>
</TestSettings>
请注意,我实际上并没有将此文件添加到Visual Studio 2012中的单元测试项目本身。然后,我将构建服务器的构建定义配置为指向已签入.testsettings
文件。
这样我就可以在我的开发盒上使用Visual Studio 2012中的新(更好)测试运行器,但Visual Studio 2010测试运行器在构建服务器上运行良好。