2011-08-01 16 views
2

VS 2010で作成されたC++ DLLプロジェクトがあります。COM(ATL)として公開されています。このDLLを参照として別の.NETプロジェクトに使用しました。次のようにC++プロジェクトのリンカの設定が設定されている:私は2010年にC++プロジェクトがうまく構築さTFSにおけるこれら二つのプロジェクトをビルドするビルド定義を作成しますが、C++プロジェクトの出力DLLが登録されていないため、.NETプロジェクトが失敗した COM DLLの登録がTFS 2010で失敗しました

 
­"Register Output" = Yes 
"Per-user Redirection = Yes 

。 "Per-User redirection" = falseに設定すると機能しません。私はまた、WFSアクティビティ 'InvokeProecss'を使用して、Regsrv32 /バッチファイル/自分のexeなどを使用してC++ dllを登録しようとしましたが、終了コードは5になります。TFS 2010はWindows 2008 Server R2にあります。そして、私はそれが管理者としてプロセスを実行していないと思います。

私がtlbimpを使用してinterop dllを生成し、.NETのproejctでそのinteropを参照すると、tfsビルドでうまくいきます(tlbを呼び出すためにInvokeProecssを追加する必要があります)。しかし、私たちの一般的なプラクティスは.NETのproejctから直接COM dllを参照することであるため、これは受け入れられません。

誰でもお手伝いできますか?

ユーザー名とパスワードの入力を求めずにtfs自動ビルドアクティビティ 'InvokeProcess'を管理者として実行する方法はありますか?

+2

COM dllを直接参照することはできません。常にtlbimp.exeが必要です。ビルドサーバーにCOMサーバーを登録することはレジストリの汚染だけを引き起こす恐ろしい習慣です。そして必要ではありません。 tlbimp.exeを実行するだけで、管理者権限は必要ありません。 –

答えて

2

デフォルトでは、TFSビルドサービスは比較的低特権のアカウントである「ネットワークサービス」アカウントとして実行されます。また、任意のドメインアカウントとして実行するように設定することもできます。しかし、あなたが説明した問題の解決策としてそれをお勧めしません。私は、この場合には、あなたのマネージアセンブリからタイプライブラリインポータ(Tlbimp.exe)を「参照」COMサーバーを使用する方が良いだろう、というハンスと同意するだろう。

COMオブジェクトが変更されていない場合は、あなただけの、相互運用機能アセンブリを生成するタイプライブラリインポートツールを使用しているを確認し、.NETプロジェクトから参照することができます。それ変更がある場合は、InvokeProcessアクティビティを使用するのではなく、相互運用機能アセンブリを生成するために、ポストビルドステップを追加することができます。 Hans氏が指摘したように、マネージアセンブリから直接というCOMオブジェクトを実際に参照することはできません。参照は、登録されたCOMサーバーへの参照を解決した後、実際に相互運用機能アセンブリがビルド時に生成されるようにしています。

+0

みんなありがとう、私は最終的にTFSは、COMを登録することができるようにドメインユーザーのいずれかを使用してプロセスを実行することになりました。私はそれがtlbimpとして正常に動作しますが、それはCOMプロジェクトをコンパイルし、代わりに、直接相互運用作成tlbimpと使用するのでは、.NETプロジェクトにそれを参照するために使用されているだけで、私たちの開発者だと述べ、あまりにハンスに同意します。とにかく..あなたのすべての助けにたくさんの感謝します。 –

関連する問題