2010-12-27 17 views

risposta

4

solito avvicinarsi questo avendo DLL distinte per Playform, così posso usare funzioni della piattaforma disponibili quando possibile (spesso non è una rigorosa sottoinsieme/superset, e puntando l'incrocio è eccessivamente limitando se si desidera la prestazione del battito ecc.).

La maggior parte delle funzioni sono comuni allo, quindi la quantità di codice #if (con simboli di creazione specifici delle funzionalità) è spesso minima.

Per evitare problemi con la dimenticanza di aggiungere file di progetto, utilizzo un jolly ricorsivo in csproj, quindi tutti i file .cs vengono inclusi automaticamente.

+0

Ciò significa che hai due progetti distinti (uno .NET e uno CF.NET), entrambi con lo stesso file sorgente ma sta cambiando solo il tipo di progetto? Quindi, quando modifichi un progetto, entrambi verranno automaticamente modificati? –

+0

@Arnaud si, esattamente quello. –

+0

Grazie per la spiegazione :), essenzialmente distinguerò entrambi i framework a causa del dispositivo e della gestione della batteria ... (Easier in. NET che CF.NET) –

1

Considerare l'utilizzo delle direttive del preprocessore.

È possibile creare 2 versioni della stessa libreria per .NET generico e CF.

come:

#if (!COMPACT_FRAMEWORK) 
      // some code only for general .NET 
#endif 
+0

Sì, ma per impostazione predefinita, il progetto deve essere un progetto Windows (.NET FW) o un progetto di dispositivo Smart (CF.NET FW)? –

+0

Deve essere "libreria di classi". – Incognito

+0

Sì, ma quando si crea prima si sceglie il tipo di progetto che si utilizzerà (Smart o Windows uno). ;) –

2

Trovo che ci siano due approcci per condividere le classi di libreria tra le basi di codice CF .NET e .NET.

il codice è identico

Spesso le librerie possono essere identici, in particolare se sono librerie di base che hanno calcoli, o classi di business che sono identici. Per le librerie non-UI questo è spesso il caso poiché .NET CF è principalmente un sottoinsieme di .NET.

In questo caso, è possibile semplicemente creare un progetto di dispositivo e includerlo per il progetto Windows completo. Riceverai un avviso che stai caricando un progetto di dispositivo, ma se non hai usato alcun codice specifico CF, va bene.

il codice è molto simile, ma diverso

In questo caso, ho creare due progetti e quindi due assemblee. Uno di questi assembly lo compongo e include tutti i file utilizzati. Nel secondo aggiungo i file come collegamenti per includerli come riferimenti, quindi tutti gli aggiornamenti sono riflessi. Quindi uso ifdefs per eventuali casi speciali in cui potrebbero differire.

+0

Nel mio caso, è una libreria tecnica (piccolo framework) che incorpora l'API di tutti i dispositivi che dovrebbe accendere. Ma tutti questi dispositivi non hanno la stessa versione del sistema operativo (alcuni sono su WinCE, altri su WinMobile, altri su XP Embedded) e la gestione della batteria è diversa in alcuni casi, ecco perché ho posto la domanda. Solo le cose che cambiano sono il modo per controllare lo stato di alimentazione del dispositivo, quindi, per te, quale sarebbe la soluzione migliore? Grazie per la risposta. –

+0

In primo luogo, la versione del sistema operativo non dovrebbe essere molto importante dal momento che .NET lo isola, quindi tutte le cose di base funzioneranno. Probabilmente creerò un assembly per CE/WM come libreria CE 5.0 e un altro per XP embedded. Quindi condividi il codice e ifdefs eventuali differenze. – skeeve

Problemi correlati