私はこのプログラム ( FOO
) を作成しており、dll( BAR
) への参照が含まれています。すべてBAR
含まれているのは、さまざまな異なる計算を実行するメソッドです。 FOO
複数のコンピューターにインストールして展開することができます。私の質問は、メソッドの 1 つで数式を変更した場合 (つまり に変更x + y
した場合)、新しい に対してx - y
再構築する必要があるかどうかです。さらに重要なのは、新しいバージョンの をデプロイするだけで安全ですか?FOO
BAR
BAR
5 に答える
@vcsjones のコメントは、ここで重要な点を提起しています。
アセンブリのバージョンが変更されず、厳密な名前のアセンブリを使用していない場合にのみ、新しい DLL を置換としてドロップできます。
バージョンが変更された場合、プログラムが特定のバージョンをロードしようとして、予想とは異なるバージョンを取得するため、実行時エラーが発生する可能性があります。ただし、メソッド シグネチャが変更されていない場合、これは問題なく動作する可能性がありますが、それを保証するものではなく、常に再コンパイルすることをお勧めします。
厳密な名前はアセンブリのバージョンとデジタル署名の両方をエンコードするため、厳密な名前のアセンブリを使用する場合、これはさらに問題になります。そのため、アセンブリ内のコードが変更された場合、バージョンが変更されていなくてもデジタル署名が変更されるため、厳密な名前が変更されます。
この場合も、プログラムが期待する厳密な名前がアセンブリの厳密な名前と一致しないため、実行時エラーが発生します。したがって、この場合は常に再コンパイルが必要です。
要約する:
- コードの変更、バージョンの変更なし、厳密な名前なし - OK
- バージョンの変更と厳密な名前なし - 再コンパイルが必要な場合がありますが、推奨されます
- コードの変更と厳密な名前 - 再コンパイルが必要
- バージョンの変更と厳密な名前 - 再コンパイルが必要
メソッドに含まれる式を変更しても、プログラムを再構築する必要はありません。ただし、呼び出し引数を変更してメソッドのシグネチャを変更する場合は、プログラムを再構築する必要があります。
参照されるアセンブリに強い名前が付けられている場合:Aが任意のアセンブリ、Bが強い名前のアセンブリ、AがBを参照しているとします。その後、(上記の主張とは対照的に)Bの内容を変更することはできません。 Aを再コンパイルします。A用の簡単なコンソールアプリケーションとB用のクラスライブラリを使用して、これを試しました。厳密に名前が付けられたBを変更しても、Aでランタイムエラーは発生しませんでした。ただし、特別な場合があります。 not-strongly-namedからstrong-namedの場合、Aを再コンパイルする必要があります。そうしないと、ランタイムエラーが発生します。
Bar
プロジェクトのdllがプロジェクトのビンにあることを確認するだけですFoo
。メソッドのシグネチャが変更されていない限り、問題ありません。
いいえ、必要に応じて新しい DLL をドロップできます。新しい DLL が古い機能を壊さない限り、参照元プロジェクトを再構築する必要はありません。