Domanda

Il mio codice sorgente deve supportare sia la versione .NET 1.1 che la 2.0 ...come posso testare le diverse versioni e qual è il modo migliore per affrontare questa situazione.

Mi chiedo se dovrei avere le due sezioni di codice in linea, in classi, metodi separati, ecc.Cosa ne pensi?

È stato utile?

Soluzione

Se vuoi fare qualcosa del genere dovrai utilizzare i comandi del preprocessore e i simboli di compilazione condizionale.

Utilizzerei simboli che indicano chiaramente la versione di .NET a cui ti rivolgi (ad esempio NET11 e NET20) e quindi avvolgerò il codice pertinente in questo modo:

#if NET11
// .NET 1.1 code
#elif NET20
// .NET 2.0 code
#endif

La ragione per farlo in questo modo piuttosto che nel semplice if/else è un ulteriore livello di protezione nel caso qualcuno si dimentichi di definire il simbolo.

Detto questo, dovresti davvero approfondire il motivo per cui vuoi/necessario farlo.

Altri suggerimenti

Ci sono molte opzioni diverse qui.Dove lavoro usiamo i pragma #if ma potrebbe anche essere fatto con assembly separati per le versioni separate.

Idealmente dovresti almeno mantenere il codice dipendente dalla versione in file di classe parziali separati e rendere disponibile la versione corretta in fase di compilazione.Lo applicherei se potessi tornare indietro nel tempo, il nostro codice base ora ha molti pragma #if e talvolta può essere difficile da gestire.La parte peggiore dell'intera faccenda del pragma #if è che Visual Studio ignora semplicemente tutto ciò che non verrà compilato con le definizioni correnti e quindi è molto facile controllare le modifiche importanti.

NUnità supporta sia 1.1 che 2.0 e quindi è una buona scelta per un framework di test.Non è troppo difficile usare qualcosa del genere NAnt per creare build 1.1 e 2.0 separate e quindi eseguire automaticamente i test NUnit.

Vorrei porre la domanda sul PERCHÉ devi mantenere due basi di codice, ne sceglierei una e la seguirei se ce n'è qualche possibilità.

Cercare di mantenere due basi di codice sincronizzate con il numero di modifiche e i tipi di modifiche sarebbe molto complesso e un processo di creazione per entrambe le versioni sarebbe molto complesso.

Abbiamo riscontrato questo problema e ci siamo ritrovati con un "livello di compatibilità" in cui abbiamo implementato un unico set di interfacce e codice di utilità per .NET v1.1 e v2.0.

Quindi il nostro programma di installazione ha stabilito il codice giusto per la versione giusta.Abbiamo usato NSIS (gratuito!) e hanno funzioni che puoi chiamare per determinare la versione .NET.

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