4

私にはいくつかの異なるソリューションがあり、一部のプロジェクトは他のソリューションのプロジェクトからの出力に依存している可能性があります。これを管理するために、ビルド後に各プロジェクトの/ bin /フォルダーから共有ライブラリの場所にdllファイルをコピーし、そこから依存プロジェクトにコピー/参照しています。

ただし、ライブラリソリューションが大きくなると、これは保守できなくなる傾向があります。私の時間の多くは、Windowsエクスプローラーでソリューションディレクトリをトラバースして/ bin /フォルダーを探し、必要な各フォルダーからdllファイルのどれかを見つけようとすることに費やされています。

ソリューション内のすべてのプロジェクトに同じ出力ディレクトリを持たせたいというヒントをVisualStudioに与える方法はありますか?たとえば、ソリューションフォルダーのすぐ下にある/ bin /フォルダーでは、すべてのプロジェクトが出力を配置します。

可能であれば、ファイルをコピーするハードコードされたビルド後のイベントなしでこれを実現したいと思います。プロジェクトの出力でファイル名が変更されたり、別のファイルが追加されたりすると失敗するためです。実際の出力ディレクトリの場所(必要に応じて$(OutDir)の場所)を変更したいと思います。

4

2 に答える 2

7

ビルド後のイベントを使用したくないとおっしゃっていたのは知っていますが、なぜ私に興味をそそられなかったのかという理由があります。ビルド後のイベントで.dllの名前をハードコーディングしているようです。それは簡単に回避できます。

xcopy "$(TargetDir)*" "c:\common\" /Y

これ*により、bin /Debug/フォルダー内のすべてが共通フォルダーにコピーされます。必要に応じて、dllをコピーすることもできます。または、を使用する場合$(TargetPath)は、プロジェクトの結果である1つのdllのみをコピーし、他の関連する依存関係はコピーしません。

アップデート

これを行う方法は、各プロジェクトでbinフォルダー全体がサブフォルダーにコピーされることです。2つのプロジェクトがWebUtilありHtmlParser、WebUtilがHtmlParserに依存しているとします。両方のプロジェクトで、を使用しますxcopy "$(TargetDir)*" "c:\common\$(ProjectName)" /Y。これにより、c:\ common \ WebUtil \とc:\ common\HtmlParserが作成されます。WebUtilで、c:\ common \ HtmlParser\HtmlParser.dllへの参照を追加します。これで、c:\commonにHtmlParser.dllのコピーが2つあります。

c:\ common \ HtmlParser \HtmlParser.dll//最新のビルド。c:\ common \ WebUtil \ HtmlParser// WebUtilがビルドされたときの最新のビルドは何でしたか

これにはあらゆる種類の利点があります。HtmlParserのAPIを変更した場合、WebUtilを再構築しようとするまで古いHtmlParser.dllが存在するため、WebUtilは引き続き機能します(その時点で、APIが変更されたためにビルドエラーが発生します)。

ここで、WebUtilに依存する3番目のプロジェクトが混在していて、HtmlParserでクラスを公開するWebUtilの一部を使用している場合は、新しいプロジェクトから両方のプロジェクトへの参照を追加する必要があります。HtmlParser.dllへの参照を追加するときは、c:\ common\WebUtilにあるものを使用してください。これを行うのは、WebUtilの必要な要件としてのみ含めるためです。これで、WebUtil.dllの現在のバージョンと一致するバージョンのHtmlParser.dllが常に作成されます。

それが理にかなっていることを願っています。管理するのは間違いなく難しいことです。svn:externals=Pを使用してすべての依存関係のプルダウンを開始する必要があるまで待つだけです

于 2010-07-21T08:30:35.147 に答える
3

各プロジェクトのプロパティで出力ディレクトリを設定できます。

プロジェクトを右クリックして、Properties

C#の場合、これはBuildプロパティページの1つであり、の下OutputにありOutput directoryます。

VB.NetプロジェクトではCompile、上部のテキストボックスのタブにあります。

于 2010-07-21T08:30:07.307 に答える