Quali modifiche a un assembly con nome sicuro richiedono una modifica in AssemblyVersionAttribute? Chiaramente, cambiare la API pubblica in un modo che potrebbe richiedere a un client di dover apportare una modifica del codice richiede un aumento di AssemblyVersion. Ma che dire delle modifiche all'API pubblica che non richiedono modifiche al codice nel client? Ad esempio:.NET: rispetto a AssemblyVersion, cosa definisce la compatibilità binaria?
- l'aggiunta di una classe pubblica o di un'interfaccia?
- l'aggiunta di un membro pubblico a una classe o un'interfaccia pubblica? (MODIFICA: drscroogemcduck indica correttamente in basso che l'aggiunta di un membro a un'interfaccia farebbe affluire tutti gli implementatori.Splendimi.)
- un aumento della visibilità di un membro della classe?
Deve esserci una documentazione definitiva di questo da qualche parte su MSDN (o, conoscendo MS, su alcuni blog personali di MSSE). Ma semplicemente non riesco a trovarlo. Per favore aiuto!
Due domande: * mi potete puntare alla documentazione - ufficiale o altrimenti - sulla vostra prima dichiarazione? * ti dispiacerebbe elaborare la tua seconda affermazione? In questo caso clinico, voglio aumentare la visibilità, dall'interno al pubblico, del ctor di una classe pubblica. Non mi è chiaro come ciò possa portare (all'inferno della versione GAC di) DLL. – cero
Primo: dovrei cercarlo. Fondamentalmente, il JIT compila i metodi il più tardi possibile. L'associazione finale si verifica solo quando la JIT compila il metodo, quindi se il metodo è lì e corrisponde alla firma, funzionerà - questa è la mia esperienza. L'aggiunta di metodi alle interfacce pubbliche non sarebbe comunque una buona idea, dal momento che ciò potrebbe portare a metodi mancanti. – Lucero
Per quanto riguarda la seconda affermazione, la modifica del codice e l'eliminazione dell'identità dell'assembly possono comportare comportamenti diversi. Ad esempio, quando si esegue il reflection, si specifica se si desidera trovare membri privati o pubblici. Se si utilizza solo l'associazione "privata", non troverà più il ctor (nel tuo caso) e l'utente otterrà un messaggio di errore anche se lui (e il runtime) pensa che sia la stessa versione ...e può confondere il runtime se anche l'assembly era nel GAC. Non farlo – Lucero