Domanda

Considera due dll .net. Il primo, "application.dll" contiene la logica di business principale e il codice di accesso ai dati. Il secondo, "webservice.dll" consiste principalmente in WebMethods che si collegano a oggetti e metodi con application.dll allo scopo di fornire chiamate di servizi Web a codice esistente.

Quali modifiche (ad esempio aggiungere nuove classi, aggiungere un nuovo campo o metodo a una classe esistente ecc.) possono e non possono essere apportate ad application.dll senza richiedere la ricompilazione di webservice.dll?

È stato utile?

Soluzione

La maggior parte delle cose andrà bene; alcune cose che lo romperanno:

  • Rimozione dei * tipi utilizzati (a meno che non si stia utilizzando l'inoltro dei tipi)
  • Rimozione * dei metodi utilizzati (incluso il costruttore)
  • Modifica della firma dei metodi (utilizzati)
  • Modifica dei campi pubblici in proprietà (che vengono utilizzate)
  • Modifica degli interni di serializzazione se si utilizza la serializzazione
  • Aggiunta di un metodo a un'interfaccia, in cui la seconda DLL ha un tipo che implementa tale interfaccia
  • Aggiunta di un metodo astratto a una classe base ereditata nella seconda DLL
  • Quasi tutto ciò che è interno se si usa (ab) la riflessione hacky
  • Aggiunta di vincoli a un tipo / metodo generico
  • Contrassegnare un tipo come sigillato quando è stato ereditato nella seconda dll
  • Aggiunta di un campo a struct se il chiamante utilizza l'inizializzazione per membro anziché l'inizializzazione del costruttore

(la rimozione include la modifica dell'accessibilità a qualcosa di non pubblico)

Altri suggerimenti

Tecnicamente, il nome lo interromperà (nome e versione e token chiave nel caso di assembly con nome sicuro). Altrimenti, il framework tenterà di caricare e utilizzare la DLL, e questo funzionerà più o meno bene fino a quando non raggiunge un tipo diverso o una firma del metodo, un tipo mancante ecc. Ma tieni presente che ri l'utilizzo dei nomi sta tornando direttamente all'inferno DLL (o ai relativi problemi).

Suggerisco di leggere di più su versioning dell'assembly per avere un'idea come risolvere tali problemi.

è possibile apportare modifiche a application.dll senza richiedere la ricompilazione di webservice.dll finché non si chiamano le nuove classi, funzioni [aggiunte in application.dll]. se si desidera utilizzare una qualsiasi delle modifiche di application.dll in webservice.dll, è necessario ricompilare webservice.dll

ofcourse, se si modifica la firma o il livello di accesso di uno dei metodi o delle proprietà in application.dll utilizzati da websrvice.dll, il codice verrà interrotto in webservice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top