0

WPF C#アプリを確実にビルドするためにTFSチームビルドを取得しようとしています。このアプリは、私たちが維持しているVB6Lib.dllに依存しています。このVB6Lib.dll自体は、私たちが維持している他のC#ライブラリに依存しています。

ビルドするビルド定義を(順番に)設定しました:

  • VbDependencies.sln(この中のすべてのライブラリにはcom相互運用機能が設定されているため、VB6はTLBを見つけることができます)
  • buildVB6Lib.proj( "VB6.exe / make / d"を呼び出してビルドサーバー上にVBLib.dllを作成するmsbuildファイル。このスクリプトの一部として、VB6Lib.dll出力をC:\ tmpにコピーしています)
  • MainApp.sln(私のワークスペースに、C:\ tmp \ VB6Lib.dllへの参照を追加しました)

この音は大丈夫ですか?私の開発用ラップトップでは、通常、VB6をビルドし、その出力を\ tmpにコピーしてから、C#ソリューションで参照を追加する前にそこにzippy32を追加します。ビルド定義が実行していると確信していないのは、このステップです。

また、VB6ビルドからより有用な出力を取得する方法はありますか?現在、「ファイル'xxx.bas'のコンパイルエラー'ライブラリのプロジェクトを見つけることができます」が表示されますが、実際のライブラリが見つかりません。

4

1 に答える 1

2

開発システムでのビルド プロセスの重要なポイントは、COM オブジェクトの登録にあるという点で正しいです。ただし、COM オブジェクトをビルド サーバーに登録することは一般的には望ましくありません。これは、間違った COM オブジェクトが登録された場合や登録が失敗した場合に、あらゆる種類のバージョン管理の問題やサイレント エラーが発生する可能性があるためです。

これを実現する適切な方法は、相互運用アセンブリを手動で生成し、COM オブジェクトの代わりにそれを参照することです。これは、たとえば次のように tlbimp ユーティリティで実行されます。

tlbimp ..\Libraries\VBLib.dll /out:..\Libraries\Interop.VBLib.dll

開発システムでそのコマンドを実行し、VB6Lib.dll への参照を削除して、Interop.VBLib.dll への参照を追加します。その後、相互運用アセンブリが常に正しいバージョンからビルドされるように、tlbimp コマンドを参照元プロジェクトのビルド前イベントとして追加できます。これにより、COM オブジェクトをビルド システムに登録する必要がなくなります。

于 2012-05-22T17:05:18.883 に答える