Il modo migliore per organizzare una soluzione VS multitargeting portandola da .net Framework ad entrambi .net Framework + Core?

2

Non sono un madrelingua inglese e sono nuovo di .net Core .

Ho un compito per portare la logica di un'app WPF a .Net Core mentre questa app funziona come in precedenza. L'app ha circa il 70% diVisual Studio assiemi:

  • Diciamo che 40 di questi sono legati alla logica e devono diventare multipiattaforma.
  • Supponiamo che circa 20 degli assemblaggi relativi alla logica utilizzino WCF o Clipboard o altre cose che non funzionano su .Net Core.

Creerò la nuova soluzione da zero. Questa soluzione dovrebbe avere assemblaggi con targeting .Net Framework , .Net Core e entrambi Framework + Core .

Ma come è meglio organizzare questa nuova soluzione ?

Devo avere 3 cartelle di soluzioni / categorie di assemblaggi:

  • Framework Assembla
  • Core Assembla
  • Multitargeted Assembla

Questo implica:

  • i numeri sopra sono corretti
  • ciascuno dei 20 assemblaggi correlati alla logica con cose che non funzionano su .Net Core rientrano in 3 nuovi gruppi ( Core, Framework, MultiTargeted )
  • gli assembly core -only implementano le stesse funzionalità in .net Core come framework o contengono solo stub o NotImplementedExceptions

, la quantità di assemblaggi alla fine dovrebbe essere: 30 + 20 + 20*3 = 110 in questo caso.

UPD : sono a conoscenza della possibilità di utilizzare la compilazione condizionale tramite le direttive, avendo quindi 1 assembly anziché tre. Non sono sicuro, ma ho un preconcetto che questo non è un buon approccio (aggiunge confusione di codice).

UPD2 : ulteriori informazioni sulle direttive del compilatore: Le direttive del compilatore sono Antipattern?

Grazie!

    
posta Andrey K. 20.07.2018 - 20:16
fonte

1 risposta

1

Vorrei iniziare con la cosa semplice: fare una distinzione tra le tue librerie ed eseguibili. La cosa più semplice è avere tutte le tue librerie come target per NetStandard. La versione di NetStandard che utilizzi dipende dal livello di compatibilità necessario ( riferimento ).

  • Microsoft.Net 4.6.1 - > può utilizzare fino a NetStandard 2.0
  • NetCore 1.x - > può utilizzare fino a NetStandrd 1.6
  • NetCore 2.0 - > può utilizzare NetStandard 2.0

Comprendi che con ogni livello superiore di NetStandard c'è più supporto per le API standard. Sarai costretto ad apportare alcune modifiche al codice della tua libreria e a fare riferimento esplicito agli assembly di cui hai bisogno. NetStandard è costruito attorno a API più granulari. La cosa bella è che le tue librerie possono essere utilizzate sia nelle app NetCore che nelle app framework Microsot.Net senza multi-targeting. Hai più capacità rispetto alle vecchie librerie PLC.

La linea di fondo è che se si utilizzano le versioni supportate di .Net, è possibile utilizzare alcune versioni della libreria NetStandard. I vantaggi di questo approccio sono:

  • Questo elimina la necessità di multi-target o di lavorare con la compilazione condizionale
  • Ti consente di utilizzare lo stesso assembly in net-core e Framework app
  • Ti consente di sfruttare il supporto NuGet integrato nella nuova struttura del progetto, inclusa la creazione e la distribuzione delle librerie NuGet in un repository locale.
risposta data 23.07.2018 - 21:09
fonte

Leggi altre domande sui tag