3

いくつかの一般的な機能を取得するためにwixlibファイルを参照するインストーラーがあります。wixlibは別のソリューションに組み込まれ、そのソリューション内のフォルダーに移動されます。TFSビルドを使用してインストーラーをビルドしようとすると、light.exeからエラーが発生します。

light.exe: The system cannot find the file '..\..\..\Core\Common\assemblies\v1.0\Common.Wix.wixlib' with type 'Source'.

他の一般的なアセンブリがいくつか保存されているため、通常のプロジェクトでは\ assembiles\v1.0を参照できます。ビルド中にWiXにこの場所を認識させるにはどうすればよいですか?

4

2 に答える 2

2

wixlib を直接参照しています。したがって、TFS ビルド プロセスを理解している限り、ソリューションの TFS プロジェクトに追加する必要があります。TFS プロジェクトは、別の非依存ソリューションの出力に依存するべきではありません。それは少なくとも悪い習慣です。いずれにせよ、プロジェクトがサーバー上でビルドされる前に、この出力が生成されることを保証することはできません。

私が覚えている限りでは、TFS ビルドはビルドごとに個別のフォルダーを作成し、そこにソースを取得します。そのため、ソリューションは同じフォルダー階層レベルにありません。

wixlibs をインストーラー プロジェクトに明示的にコピーすることを支持するもう 1 つのポイント: バージョン管理 - この場合、共通ライブラリーにバグが発生しても、それを参照するすべてのプロジェクトがすぐに壊れることはありません。また、すべてのプロジェクトを段階的にアップグレードしてテストできます。ビルドごとにサードパーティの DLL の新しいバージョンを自動的にダウンロードすることを想像できますか? その dll を変更すると、変更が重要でない場合でも、すぐにアプリケーションが壊れます。

于 2012-11-19T12:07:00.580 に答える
0

共有コンポーネントとアクティブなソリューションは TFS の 2 つの別々のプロジェクトにあるため、参照の相対パスがそのまま残るようにワークスペースを設定する必要があります。これを行う最も簡単な方法は、TFS ビルドのワークスペースにビルド エージェント フォルダー構造を設定して、$(SourceDir) がルートを表すようにすることです。ただし、ソース管理フォルダーは変更しないでください。変更はありません。

たとえば、次の構造があるとします。

-TFS
|-SharedComponents
||-MyComponents
|-ProjectArea
||-MyProject

ビルド ワークスペースには、次の 2 つのアイテムが必要です。

Source Control Folder               Build Agent Folder
---------------------------------------------------------------------------------
$/ProjectArea/MyProject             $(SourceDir)\ProjectArea\MyProject
$/SharedComponents/MyComponents     $(SourceDir)\SharedComponents\MyComponents

これは、ビルド フォルダー内の TFS の構造を模倣するため、すべての相対パスをそのまま維持できます。

この構成に関するもう 1 つの注意事項: 共有コンポーネントが別の場所にあるため、MyProject にソリューション フォルダーを作成し、使用しているコンポーネントをそこに追加することをお勧めします。これにより、誰かが TFS からプロジェクトをロードしたときに、それらが自動的にプルされるようになります。ビルド エラーを発見した後で、共有コンポーネント フォルダーに戻って個別にプルダウンする必要はありません。

于 2012-11-30T17:45:38.680 に答える