17

私はこのプログラム ( FOO) を作成しており、dll( BAR) への参照が含まれています。すべてBAR含まれているのは、さまざまな異なる計算を実行するメソッドです。 FOO複数のコンピューターにインストールして展開することができます。私の質問は、メソッドの 1 つで数式を変更した場合 (つまり に変更x + yした場合)、新しい に対してx - y再構築する必要があるかどうかです。さらに重要なのは、新しいバージョンの をデプロイするだけで安全ですか?FOOBARBAR

4

5 に答える 5

13

@vcsjones のコメントは、ここで重要な点を提起しています。

アセンブリのバージョンが変更されず、厳密な名前のアセンブリを使用していない場合にのみ、新しい DLL を置換としてドロップできます。

バージョンが変更された場合、プログラムが特定のバージョンをロードしようとして、予想とは異なるバージョンを取得するため、実行時エラーが発生する可能性があります。ただし、メソッド シグネチャが変更されていない場合、これは問題なく動作する可能性がありますが、それを保証するものではなく、常に再コンパイルすることをお勧めします。

厳密な名前はアセンブリのバージョンとデジタル署名の両方をエンコードするため、厳密な名前のアセンブリを使用する場合、これはさらに問題になります。そのため、アセンブリ内のコードが変更された場合、バージョンが変更されていなくてもデジタル署名が変更されるため、厳密な名前が変更されます。

この場合も、プログラムが期待する厳密な名前がアセン​​ブリの厳密な名前と一致しないため、実行時エラーが発生します。したがって、この場合は常に再コンパイルが必要です。

要約する:

  • コードの変更、バージョンの変更なし、厳密な名前なし - OK
  • バージョンの変更と厳密な名前なし - 再コンパイルが必要な場合がありますが、推奨されます
  • コードの変更と厳密な名前 - 再コンパイルが必要
  • バージョンの変更と厳密な名前 - 再コンパイルが必要
于 2012-12-06T20:30:42.373 に答える
7

メソッドに含まれる式を変更しても、プログラムを再構築する必要はありません。ただし、呼び出し引数を変更してメソッドのシグネチャを変更する場合は、プログラムを再構築する必要があります。

于 2012-12-06T20:21:27.170 に答える
2

参照されるアセンブリに強い名前が付けられている場合:Aが任意のアセンブリ、Bが強い名前のアセンブリ、AがBを参照しているとします。その後、(上記の主張とは対照的に)Bの内容を変更することできません。 Aを再コンパイルします。A用の簡単なコンソールアプリケーションとB用のクラスライブラリを使用して、これを試しました。厳密に名前が付けられたBを変更しても、Aでランタイムエラーは発生しませんでした。ただし、特別な場合があります。 not-strongly-namedからstrong-namedの場合、Aを再コンパイルする必要があります。そうしない、ランタイムエラーが発生します。

于 2013-03-11T18:18:42.310 に答える
2

Barプロジェクトのdllがプロジェクトのビンにあることを確認するだけですFoo。メソッドのシグネチャが変更されていない限り、問題ありません。

于 2012-12-06T20:20:59.713 に答える
1

いいえ、必要に応じて新しい DLL をドロップできます。新しい DLL が古い機能を壊さない限り、参照元プロジェクトを再構築する必要はありません。

于 2012-12-06T20:20:18.107 に答える