14

いくつかの共通ライブラリがあります。理想的には、古いバージョンに対してコンパイルされている場合でも、すべての dll で最新バージョンの dll を使用する必要があります (最新バージョンには後方互換性があると仮定します)。

例:

プロジェクト dll
共通コントロール dll
ロギング dll
データベース アクセス dll

プロジェクトおよび共通コントロールは、データベース dll の v2 を参照します。ただし、ロギングは v1 を参照します。

異なるコンポーネントで異なるバージョンが参照されている場合、VS はどのバージョンを使用するかをどのように選択しますか?
最新のデータベース (v2) を使用するには、v1 dll を再コンパイルする必要がありますか? それとも、これを自動的に取得できますか?
特定のバージョンを強制的に使用することはできますか?

ありがとう、

アレックス

4

4 に答える 4

11

デフォルトでは、バージョン管理された DLL の場合、VS は完全一致を強制すると思います。ただし、参照のプロパティを見ると、「特定のバージョン」というプロパティが見つかります。それを「false」に設定すると、それ以降のバージョンと一致します。

残念ながら、適切な MSDN リンクを見つけるための完全なバージョンの VS を持っていません。

さらに、app.config でassemblyBinding要素を使用できます。

于 2008-10-09T10:35:36.280 に答える
8

ここには、実際には2つのシナリオがあります。厳密な名前/ GACを使用する場合と、厳密な名前を使用しない場合です。

厳密な名前を使用していて、コンポーネントをGACにインストールしている場合、.Netは、コンパイル時にクライアントが参照していたコンポーネントのバージョンを使用する必要があります。したがって、あなたの例では、DLLがGACに並列に格納できるため、ProjectがデータベースV2を参照し、LoggingがデータベースV1を参照する可能性があります。したがって、実際にロギングでV1ではなくV2を使用する場合は、構成ファイルを変更して、「V1への参照はV2を指す必要がある」と言う必要があります。これを行うには、アプリファイル、マシンファイルなどのさまざまな場所があります。

厳密な名前を使用していない場合、.Netはデフォルトで、クライアントと同じフォルダーにあるバージョンのDLLを使用します。したがって、Project、CommonControls、およびLoggingをデータベースV2と同じフォルダーにデプロイするとします。次に、LoggingがデータベースV1に対して構築された場合でも、同じフォルダー、つまりデータベースV2内のコンポーネントを使用しようとします。V2が、Loggingが使用したいのと同じパブリッククラスとメソッドを提供できる限り、正常に機能します。

すべてのアプリケーションが内部にある私の環境では、GACを使用しません。アプリケーションに必要なすべてのファイルを単一のフォルダーにデプロイするだけです。共通のコンポーネントがたくさんある場合、構成ファイルの同期を維持するのは悪夢です。

これは、すべてのアプリケーションが現在登録されているDLLのコピーを取得するCOMとはまったく異なります(V1とV2がバイナリ互換であると想定)。

于 2008-10-09T12:50:20.843 に答える
5

いくつかの提案があるこのサイトに出くわしました: http://blog.fredrikhaglund.se/blog/2008/02/23/get-control-over-your-assembly-dependencies/

特定のバージョンを取得するには、明らかに web.config または app.config を編集する必要がありますか?

「最後に、メモ帳を使用して csproj ファイルを確認します (または、Visual Studio でプロジェクトをアンロードして、テキストとして開くことができます)。Visual Studio を使用して参照を追加すると、バージョン番号と公開キーの両方を含むアセンブリ参照が取得されます。これにより、ベンダー アセンブリを新しいバージョンにアップグレードするときに問題が発生する可能性があります。」
http://blog.fredrikhaglund.se/blog/2008/02/23/get-control-over-your-assembly-dependencies/

于 2008-10-09T11:26:37.347 に答える
1

ソースがある場合は、dll 参照の代わりにプロジェクト参照を使用できます。そうすれば、常に最新のものを入手できます。

于 2008-10-09T11:19:25.443 に答える