2010-11-23 4 views
1

環境がここにあるのC#/。私はいくつかの日付のCOM DLLを使用するコードの一部をテストしてる私のMSユニットテストユニットテストプロジェクトでサイドバイサイド実行し、MSユニットテスト

4.ネット(3つのCOM DLLがすべて含まれているので、これはいくつかの他のCOM DLLを使用します)。

通常のアプリケーション/サービスの設定で実行している場合、COM dllのアセンブリIDにリンクするマニフェストを使用してサイドバイサイドの実行が問題なく動作します私の単体テストプロジェクトからは、「クラスが登録されていない」例外のためにいつも失敗します。

は今、私はすでにこれを試してみた:

  • は、テストDLLのマニフェスト、COM DLLをマニフェスト+ COM DLLを自ら

両方を埋め込みテストDLLのマニフェスト

  • を埋め込むしかし、無駄に。だから私は疑問に思っています:ユニットテスト環境でマニフェストを通してCOMをリンクすることをどのように認識させることができますか?私には、DLLマニフェストのリンクがうまく動作していないようです(EXEマニフェストは正常に動作しています)が、通常はそのような考えは何か間違っています...

    私は通常、このようなものですが、これにはヒット数がほとんどなく、これに似ているものはありませんので、ご意見やご意見があれば教えてください:)そして、細かいことが必要な場合は教えてください。

    (私は知っているが、COM dllの使用はおそらく適切な場所への依存性注入によって回避できますが、今はサイドバイサイドセットアップのユニットテストに関するこのケースを探求したいと思います。

    種類よろしく

    ジェスパー

  • 答えて

    0

    私はMSユニットテストに慣れていないよ、これは単なる推測です。

    通常のアプリケーション設定では、アプリケーションマニフェストを通じてCOMサーバーマニフェストを参照したため、一般的な「プロセスアクティベーションコンテキスト」には適切な参照が含まれています。

    ユニットテストシナリオでは、アプリケーションを制御しないため、プロセスアクティベーションコンテキストに適切な参照がないようにします。 DLLにテストDLLマニフェストを埋め込んでいますが、余分な作業をしない限り、静的DLL依存関係をマニフェストに対して解決できます。マニフェストアクティベーションコンテキストは、dllコードがアクティブなときは常に「アクティブ」ではありません。 COMサーバーへの呼び出しに関するコンテキストを手動で作成してアクティブ化することで、このコンテキストを自分で管理する必要があります。

    たとえば、CodePlexのOneCodeプロジェクトのCSRegFreeCOMClientを参照してください。

    関連する問題