4

私の問題は、複数のプロジェクトを持つ Visual Studio (2010) C# ソリューションがあり、それぞれのプロジェクトのライブラリを管理しようとするのは悪夢です。これらの各プロジェクトには、いくつかの標準ライブラリ参照が含まれています (すべてビルド済み)。

例えば:

Class Lib Project 1: A.dll, B.dll, C.dll
Class Lib Project 2: A.dll, B.dll, D.dll

したがって、この場合、A.dll と B.dll は特定の共有ドライブから参照されます。ただし、A.dll と B.dll の新しいビルドはそれぞれ別のフォルダーに入れられます。そのため、A.dll と B.dll の最新のライブラリ ビルドにアップグレードする場合は、両方のプロジェクトの参照を新しい場所に変更する必要があります。

たった2つのプロジェクトだったとしても、大したことではありません。しかし、たとえば 10 以上になると、問題が発生し、時間がかかり、エラーが発生しやすくなります。これは全社的なプロセスであるため、最新のライブラリ ビルドがコピーされる静的な場所へのディレクトリ リンクのようなものを作成することはできません (また、自動的にアップグレードしたくない場合もあります)。

同じソリューションの下でプロジェクト間でライブラリ参照を何らかの方法で一元化できる方法を知っている人はいますか (ソリューション全体で必要ありません)。

4

3 に答える 3

1

ソース管理を使用していると思いますか?参照 (バイナリ) をソリューションに追加し、ソース コードと共にローカルに保存します。

プロジェクトの参照

すべてをまとめておくことで、その時点でどのバイナリを使用していたかを気にすることなく、いつでも特定のバージョンのソースに戻ってビルドできるようになります。

また、これにより、バイナリを一度更新することができます。その後、すべての開発者は、「取得」を行うたびに最新のものを取得できます。

編集:これを行うと、ソリューション内の複数のプロジェクトで参照できる dll のコピーを 1 つだけ保持することもできます。

于 2013-01-25T21:51:33.627 に答える
1

複雑なプロジェクト (10 以上のプロジェクトが相互に依存しているソリューションを読む) で作業する場合、通常、ソリューションのプロジェクトで使用されるすべての dll を格納する DLL フォルダーをソリューション ルートに作成します。

各プロジェクトから、これらの DLL からの参照を追加し、実行可能なプロジェクト (Web アプリ、コンソールなど) に対してのみローカル オプションをコピーします。

このようにして、A.dll をアップグレードしたい場合、共通の DLL フォルダーでのみ更新し、ソリューションを再構築できます。

- solution
 |-DLLs
 |  |- A.Dll
 |  |- B.Dll
 |  |- C.Dll
 |  |- D.Dll
 |- prj1
 |  |- References
 |  |   |- A.Dll
 |  |   |- B.Dll
 |  ...
 |- prj2
 |  |- References
 |  |   |- A.Dll
 |  |   |- B.Dll
 |  |   |- C.Dll
 |  ...
 |- prj3
 |  |- References
 |  |   |- B.Dll
 |  |   |- D.Dll
 |  ...

通常、libs dll (A.dll、B.dll、...) の更新はスクリプト (.bat または .ps1) で行われるため、自動ですが手動でトリガーされます。とにかく、ビルド前のアクションでこの操作を自動的にトリガーすることは可能です

Nuget はコミュニティ ライブラリにのみ使用しますが、プライベートな nuget リポジトリを使用することは可能ですが、環境には多すぎます。

于 2013-01-25T21:54:34.127 に答える
0

NuGetはその方法です。プロジェクトごとにそれらを管理する必要があります(プロジェクトごとにpackages.config)が、ソリューションレベルで機能する優れたGUIを提供し、プロジェクトをバッチで更新します。詳細はこちら: http: //frozenorange.wordpress.com/2011/10/12/managing-nuget-at-the-visual-studio-solution-level/

NuGetソリューションレベル

于 2013-01-25T21:45:18.370 に答える