0

我有一个后来的兼容性项目,它恰好调用了 COM,为此我进行了一些单元测试。当我从本地机器运行这些测试时,一切都很好。

但是当这些测试在我团队的构建服务器上运行时,我收到以下错误:

类初始化方法 Foo.Bar.Baz.Initialize 抛出异常。System.Runtime.InteropServices.InvalidComObjectException:System.Runtime.InteropServices.InvalidComObjectException:无法使用已与其底层 RCW 分离的 COM 对象。

在 2005-2008 年的时间范围内,我已经看到一些关于 Visual Studio 早期版本的此类问题的讨论。但是单元测试基础设施在 2012 年被完全取代。大多数解决方案似乎都涉及编辑该项目没有的“.testsettings”文件。

我正在使用 Visual Studio 2012 Update 1 进行开发,构建服务器和 TFS 实例正在运行 TFS 2010 SP1。

4

1 回答 1

0

原因是构建服务器上的 TFS 2010 团队工具正在使用 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 测试运行程序在构建服务器上工作得很好。

于 2013-03-01T20:49:12.360 回答