なんらかの理由で、私たちはベータテスターのためにコンパイルされたアセンブリ、設定ファイル、およびその他のさまざまなファイルをネットワーク共有にXCOPYするバッチファイルを作成するスクリプトを用意しています。私たちはインストーラを持っていますが、インストーラを実行するのに必要な権限を持っていないものやCitrix上で実行しているものがあります。コンテンツファイルとプライマリ出力の取得
あなたがXCOPYとCitrixの言葉であなたの机の上をすべて嘔吐したら、早めに家に帰る言い訳としてそれを使用してください。どういたしまして。
コードは、現在のような行数百有する:それは、出力ディレクトリに、そのファイルの種類をコピーするか否かを示す20個のint型のパラメータ(ファイルの種類ごとに)で、悪化するために使用
CreateScripts(basePath, "Client", outputDir, FileType.EXE | FileType.DLL | FileType.XML | FileType.CONFIG);
を。
何百もの行が、何千ものXCOPY行を含むアップロード/ダウンロードバッチファイルを作成します。セットアッププロジェクトでは、「クライアントからのプライマリ出力」や「クライアントからのコンテンツファイル」のようなものを参照できます。私はプログラムではないセットアッププロジェクトからそれを行うことができればと思っていますが、私は迷っています。
明らかに、MSは、APIを使用するか、または.csprojファイルを解析することでそれを行います。これをどうやってやりますか?私はちょうどすなわち、セットアップのカテゴリのいずれかのファイルのリストを取得する方法を探しています:
- プライマリ出力
- ローカライズされたリソース
- コンテンツファイル
- ドキュメントファイル
編集: 私はHathのようなセットアッププロジェクトを持っていますが、これは私が探しているものの半分です。完全な解決策ではないという唯一の問題は、複数のプロジェクトが同じアセンブリに依存していることです。セットアップでは、そのファイルを一度しかコピーしません。
例:
プロジェクト管理、クライアント、およびサーバーのすべてがExceptionHandler.dllに依存している、とServerはそうではない管理者とクライアントの両方が、Util.dllに依存しています。
- たAdmin.exe
- Admin.exe.config
- ExceptionHandler.dll
- Util.dll
- 管理者:これは私が探しているものですクライアント
- CLIENT.EXE
- Client.exe.config
- ExceptionHandler.dll
- Utilの。DLL
- サーバー
- Server.exeが は
- Server.exe.config
- はExceptionHandler.dll
参照されるアセンブリがすべて同じであるため、どのようなI取得する:
- 管理
- たAdmin.exe
- Admin.exe.config
- ExceptionHandler.dll
- Util.dll
- クライアント
- CLIENT.EXE
- Client.exe.config
- サーバー
- Server.exeが
- Server.exe.config
、クライアントまたはサーバは、2つのDLLのいずれかを見つけることができないとき、これはFileNotFoundExceptionをを引き起こしそれは期待している。
別のプロジェクトの出力の別の場所に重複している場合でも、出力をコピーするために設定が失われていますか?
EDIT AGAIN:参照されているすべてのDLLは、「ローカルコピー」に設定されています。私はusing NAnt and XSLT to grab the list of filesでまともな記事を見つけたので、可能な解決策でもあります。
受諾された解決策:私が始めた場所に戻っています。すべての.exeと.dllの出力は、セットアッププロジェクトの "bin"ディレクトリに格納されます。他のアプリケーションごとのフォルダには、そのディレクトリ内の実行可能ファイルへのショートカットが含まれています。
違いは、反映を使用し、実行可能ファイルごとに依存関係を列挙し、.exeファイルと.dllファイルを別々のディレクトリにコピーするように、カスタムアクションをインストーラーに追加するつもりです。ちょっとした痛みです。私はちょうど、セットアップライブラリを介してどのファイルがインクルードされるのかをプログラマチックに検出する方法があると仮定しました。
もう一度お手伝いをしてください。
- 管理者:これは私が探しているものですクライアント
部分的に動作します。私は今実行している問題で質問を更新しました。 –