Subversion、外部参照、バイナリ、およびMSBuild / Visual Studio
-
03-07-2019 - |
質問
Subversionリポジトリに保存されているプロジェクトがあります。
このリポジトリの別のフォルダーには、多くのプロジェクトで使用するライブラリのセットがあります。これらのライブラリはバイナリファイルとして保存されます。 dll、pdb、およびxml。
レイアウトの例を次に示します。
<repo-url>
\Libraries
\SQLite
\SystemHooks
\Moq
アプリケーションプロジェクトで、「libs」を追加します。ディレクトリに移動し、そのディレクトリにsvn:externals参照プロパティを追加して、必要なライブラリを取り込みます。
たとえば、私が現在取り組んでいるこのプロジェクトでは、この質問を促し、SystemHooksライブラリが必要です。したがって、アプリプロジェクトのフォルダー構造では、次のようになります。
SketchingMode <-- solution folder, other projects here as well
SketchingMode <-- app project folder
libs
SystemHooks
これの良い点は、ライブラリをより簡単に更新でき、外部定義に-rXYZ指定子を使用して、受け入れる準備ができているよりも新しいバージョンのプルを回避し、まだ1つのコピーしか持っていないことですリポジトリ内の各ファイル/バージョン。
この特定の場合、悪いことは、SystemHooksディレクトリ内のdllの1つ(pdbも必要な場合は2)をプロジェクトによって参照されずに出力ディレクトリにコピーする必要があることです。
参照は通常どおり機能しますが、このディレクトリ内のファイルの1つに&quot; Content&quot;のタグを付けると、および「常にコピー」または「新しい場合はコピー」を選択すると、libsおよびSystemHooksディレクトリ構造も出力ディレクトリにコピーされます。
そのため、ビルド後、ディスク上のディレクトリ構造は次のようになります。
SketchingMode <-- solution folder, other projects here as well
SketchingMode <-- app project folder
libs
SystemHooks
bin
Debug <-- main build output here
libs
SystemHooks <-- 1-2 files in here
これを回避してビルド後の手順を使用し、必要なコピーステートメントを追加する唯一の方法はありますか?または、プロジェクトファイルを何らかの方法で微調整して、そのような完全な構造をコピーしないようにできますか?
明確にするために、bin \ Debugディレクトリでは、そこにlibs \ SystemHooksの別のレイヤーが必要ではなく、現在bin \ Debug \ libs \ SystemHooksフォルダーにコピーされているすべてのファイルを代わりにbin \ Debugフォルダーにコピーされます。
解決
プロジェクトではなく、ソリューションのレベルまでlibsディレクトリをチェックアウトしてみませんか?ライブラリアセンブリは複数のプロジェクトで使用される傾向があるため、これが私たちの仕事です。 1つのプロジェクトのディレクトリ内に直接配置しても、共有性の高いリソースにはなりません。
SketchingMode solution
SketchingMode proj
bin
Debug
Release
Libs
SystemHooks