8

AssemblyVersionAttribute の変更を必要とする厳密な名前のアセンブリへの変更は何ですか? 明らかに、クライアントがコードを変更しなければならないような方法でパブリック API を変更するには、AssemblyVersion を増やす必要があります。しかし、クライアントのコード変更を必要としないパブリック API への変更はどうでしょうか? 例えば:

  • パブリック クラスまたはインターフェイスの追加?
  • パブリック クラスまたはインターフェイスへのパブリック メンバーの追加? (編集: drscroogemcduck は、メンバーをインターフェイスに追加すると、すべての実装者がホースになることを以下で正しく指摘しています。ばかげています。)
  • クラスメンバーの可視性の向上?

これに関する決定的なドキュメントが MSDN のどこかにあるはずです (または、MS を知っている場合は、MSSE の個人的なブログ)。しかし、私は単にそれを見つけることができません。助けてください!

4

4 に答える 4

5

Martijn の報奨金に応じて:

バイナリ互換性に関する最良のリファレンスは、コミュニティ Wiki にあります。

.NET の API を壊す変更の明確なガイド

于 2013-04-16T21:10:25.487 に答える
4

かなり簡単です...型が (パブリックまたは保護されたレイアウトで) 変更されず、メソッド シグネチャが変更されない限り (メソッドまたは型の追加は問題ありません)、JIT は DLL を問題なくリンクできるはずです。

とはいえ、うまくいったとしてもやるべきではないと思います。必要に応じて、新しいバージョンを作成し、ポリシーを使用して古いバージョンを新しいバージョンにマップします。そうしないと、DLL 地獄に逆戻りすることになります...そして、あなたはそれを望んでいないと確信しています。

于 2009-04-20T15:43:10.230 に答える
1

Microsoftは、AssemblyVersion(2.0.0.0 / 3.0.0.0のまま)を変更せずに、サービスパックリリースの.NETライブラリに新しいメソッド/クラスを追加します。MicrosoftはAssemblyFileVersionのみを変更します。たとえば、.NET 2.0 SP1では、DateTimeOffset構造体が追加されました。

マイクロソフトがこれを行うので、この方法を推奨する必要がありますか?それは紛らわしい。

于 2012-05-30T03:55:31.323 に答える
1

古いプロバイダーは新しいメソッドを実装しないため、インターフェイスにメソッドを追加することは問題ありません。

于 2009-04-20T15:52:38.087 に答える