Condividi tramite


Come le modifiche al codice possono influire sulla compatibilità

compatibility si riferisce alla possibilità di compilare o eseguire codice in una versione di un'implementazione di .NET diversa da quella con cui è stato originariamente sviluppato il codice. Una modifica specifica può influire sulla compatibilità in sei modi diversi:

Modifica comportamentale

Una modifica comportamentale rappresenta una modifica al comportamento di un membro. La modifica può essere visibile esternamente (ad esempio, un metodo può generare un'eccezione diversa) o può rappresentare un'implementazione modificata (ad esempio, una modifica nel modo in cui viene calcolato un valore restituito, l'aggiunta o la rimozione di chiamate di metodi interni o anche un miglioramento significativo delle prestazioni).

Quando le modifiche comportamentali sono visibili esternamente e modificano il contratto pubblico di un tipo, sono facili da valutare poiché influiscono sulla compatibilità binaria. Le modifiche all'implementazione sono molto più difficili da valutare; a seconda della natura della modifica e della frequenza e dei modelli di utilizzo dell'API, l'impatto di una modifica può variare da grave a innocuo.

Compatibilità binaria

La compatibilità binaria si riferisce alla possibilità di un consumer di un'API di usare l'API in una versione più recente senza ricompilazione. Le modifiche, ad esempio l'aggiunta di metodi o l'aggiunta di una nuova implementazione dell'interfaccia a un tipo, non influiscono sulla compatibilità binaria. Tuttavia, la rimozione o la modifica delle firme pubbliche di un'assembly in modo che i consumatori non possano più accedere alla stessa interfaccia esposta dall'assembly compromette la compatibilità binaria. Una modifica di questo tipo è nota come modifica binaria non compatibile .

Compatibilità del codice sorgente

La compatibilità del codice sorgente si riferisce alla capacità degli utenti esistenti di un'API di ricompilare con una versione più recente senza modifiche al codice. Quando un consumer deve modificare correttamente il codice sorgente perché funzioni con una versione più recente di un'API, si verifica una modifica del codice sorgente non compatibile .

Compatibilità in fase di progettazione

La compatibilità in fase di progettazione si riferisce alla conservazione dell'esperienza in fase di progettazione tra le versioni di Visual Studio e altri ambienti in fase di progettazione. Anche se questo può comportare il comportamento o l'interfaccia utente dei progettisti, l'aspetto più importante della compatibilità in fase di progettazione riguarda la compatibilità dei progetti. Un progetto o una soluzione deve essere aperta e usata in una versione più recente dell'ambiente in fase di progettazione.

Compatibilità retroattiva

La compatibilità con le versioni precedenti si riferisce alla capacità di un consumer esistente di un'API di funzionare con una nuova versione mantenendo lo stesso comportamento. Sia le modifiche comportamentali che le modifiche apportate alla compatibilità binaria influiscono sulla compatibilità con le versioni precedenti. Se un consumer non è in grado di eseguire o comportarsi in modo diverso quando viene eseguito con la versione più recente dell'API, l'API viene incompatibile con le versioni precedenti.

Le modifiche che influiscono sulla compatibilità con le versioni precedenti sono sconsigliate, poiché gli sviluppatori prevedono la compatibilità con le versioni precedenti di un'API.

Compatibilità futura

La compatibilità futura si riferisce alla capacità di un consumer esistente di un'API di funzionare con una versione meno recente, mantenendo lo stesso comportamento. Se un consumer non è in grado di eseguire o comportarsi in modo diverso quando viene eseguito su una versione precedente dell'API, l'API viene inoltrareincompatibili.

Mantenere la compatibilità con le versioni future esclude praticamente modifiche o aggiunte tra le versioni, poiché tali modifiche impediscono a un utente progettato per una versione successiva di funzionare con una versione precedente. Gli sviluppatori prevedono che un consumer che si basa su un'API più recente potrebbe non funzionare correttamente rispetto all'API precedente.

Mantenere la compatibilità futura non è un obiettivo di .NET.NET Aspire.