Auswirkungen von Codeänderungen auf die KompatibilitätHow code changes can affect compatibility

Kompatibilität bezieht sich auf die Kompilierung oder Ausführung von Code in einer Version einer .NET-Implementierung, die nicht mit dem ursprünglich entwickelten Code zusammenhängt.Compatibility refers to the ability to compile or execute code on a version of a .NET implementation other than the one with which the code was originally developed. Eine Änderung kann die Kompatibilität auf sechs verschiedene Arten beeinträchtigen.A particular change can affect compatibility in six different ways:

Behavior ChangeBehavioral change

Ein Behavior Change stellt eine Verhaltensänderung eines Members dar.A behavioral change represents a change to the behavior of a member. Die Änderung kann extern sichtbar sein (eine Methode kann beispielsweise eine andere Ausnahme auslösen) oder eine geänderte Implementierung darstellen (beispielsweise eine Änderung in der Art und Weise, wie ein Rückgabewert berechnet wird, das Hinzufügen oder Entfernen interner Methodenaufrufe oder sogar eine beträchtliche Leistungsverbesserung).The change may be externally visible (for example, a method may throw a different exception), or it may represent a changed implementation (for example, a change in the way a return value is calculated, the addition or removal of internal method calls, or even a significant performance improvement).

Wenn Behavior Changes extern sichtbar sind und der öffentliche Vertrag eines Typs geändert wird, können sie leicht ausgewertet werden, da sie sich auf die binäre Kompatibilität auswirken.When behavioral changes are externally visible and modify a type's public contract, they are easy to evaluate since they affect binary compatibility. Das Auswerten von Implementierungsänderungen ist weitaus schwieriger. Abhängig von der Art der Änderung und der Häufigkeit und der Verwendungsmuster der API können die Auswirkungen einer Änderung von harmlos bis schwerwiegend reichen.Implementation changes are much more difficult to evaluate; depending on the nature of the change and the frequency and patterns of use of the API, the impact of a change can range from severe to innocuous.

BinärkompatibilitätBinary compatibility

Die Binärkompatibilität bezieht sich auf die Fähigkeit eines Consumers einer API, diese API in einer neueren Version ohne Neukompilierung zu verwenden.Binary compatibility refers to the ability of a consumer of an API to use the API on a newer version without recompilation. Änderungen wie das Hinzufügen von Methoden oder einer neuen Schnittstellenimplementierung zu einem Typ wirken sich nicht auf die Binärkompatibilität aus.Such changes as adding methods or adding a new interface implementation to a type do not affect binary compatibility. Das Entfernen oder Ändern der öffentlichen Signaturen einer Assembly, sodass Consumer nicht mehr auf dieselbe von der Assembly verfügbar gemachte Schnittstelle zugreifen können, wirkt sich auf die binäre Kompatibilität aus.However, removing or altering an assembly's public signatures so that consumers can no longer access the same interface exposed by the assembly does affect binary compatibility. Eine Änderung dieser Art wird als inkompatible Binäränderung bezeichnet.A change of this kind is termed a binary incompatible change.

QuellkompatibilitätSource compatibility

Die Quellkompatibilität bezieht sich auf die Fähigkeit vorhandener Consumer einer API, die Neukompilierung für eine neuere Version ohne Quelländerungen vorzunehmen.Source compatibility refers to the ability of existing consumers of an API to recompile against a newer version without any source changes. Eine inkompatible Quelländerung tritt auf, wenn ein Consumer den Quellcode ändern muss, damit er erfolgreich für eine neuere Version einer API erstellt werden kann.A source incompatible change occurs when a consumer needs to modify source code for it to build successfully against a newer version of an API.

EntwurfszeitkompatibilitätDesign-time compatibility

Die Entwurfszeitkompatibilität bezieht sich auf die Beibehaltung der Entwurfszeit in verschiedenen Versionen von Visual Studio und anderen Entwurfszeitumgebungen.Design-time compatibility refers to preserving the design-time experience across versions of Visual Studio and other design-time environments. Dies kann zwar das Verhalten oder die Benutzeroberfläche von Designern einschließen, der wichtigste Aspekt der Entwurfszeitkompatibilität betrifft aber die Projektkompatibilität.While this can involve the behavior or the UI of designers, the most important aspect of design-time compatibility concerns project compatibility. Ein Projekt oder eine Lösung muss in einer neueren Version der Entwurfszeitumgebung geöffnet und verwendet werden können.A project or solution must be able to be opened and used on a newer version of the design-time environment.

AbwärtskompatibilitätBackwards compatibility

Die Abwärtskompatibilität bezieht sich auf die Fähigkeit, dass ein vorhandener Consumer einer API für eine neue Version ausgeführt werden kann, während er sich auf die gleiche Weise verhält.Backwards compatibility refers to the ability of an existing consumer of an API to run against a new version while behaving in the same way. Sowohl Behavior Changes als auch Änderungen in der Binärkompatibilität beeinflussen die Abwärtskompatibilität.Both behavioral changes and changes in binary compatibility affect backwards compatibility. Wenn ein Consumer nicht für die neuere Version der API ausgeführt werden kann oder sich anders verhält, ist die API abwärtskompatibel.If a consumer is not able to run or behaves differently when running against the newer version of the API, the API is backwards incompatible.

Da Entwickler in neueren Versionen einer API Abwärtskompatibilität erwarten, wird von Änderungen abgeraten, die sich auf die Abwärtskompatibilität auswirken.Changes that affect backwards compatibility are discouraged, since developers expect backwards compatibility in newer versions of an API.

AufwärtskompatibilitätForward compatibility

Die Aufwärtskompatibilität bezieht sich auf die Fähigkeit, dass ein vorhandener Consumer einer API für eine ältere Version ausgeführt werden kann, während er sich auf die gleiche Weise verhält.Forward compatibility refers to the ability of an existing consumer of an API to run against an older version while exhibiting the same behavior. Wenn ein Consumer nicht für eine ältere Version der API ausgeführt werden kann oder sich anders verhält, ist die API aufwärtskompatibel.If a consumer is not able to run or behaves differently when run against an older version of the API, the API is forward incompatible.

Durch die Beibehaltung der Aufwärtskompatibilität werden alle Änderungen oder Ergänzungen von Version zu Version praktisch ausgeschlossen, da diese Änderungen verhindern, dass ein Consumer, der eine höhere Version als Ziel hat, unter einer früheren Version ausgeführt wird.Maintaining forward compatibility virtually precludes any changes or additions from version to version, since those changes prevent a consumer that targets a later version from running under an earlier version. Entwickler erwarten, dass ein Consumer, der auf einer neueren API basiert, möglicherweise nicht ordnungsgemäß mit der älteren API funktioniert.Developers expect that a consumer that relies on a newer API may not function correctly against the older API.

Die Beibehaltung der Aufwärtskompatibilität ist kein Ziel von .NET Core.Maintaining forward compatibility is not a goal of .NET Core.

Siehe auchSee also