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 テスト ビットを使用していたことです。

次の内容のファイルを作成し、.testsettingsTFS にチェックインしました。

<?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 に答える