Domanda

ho intenzione di rilasciare un open source (MIT) .NET biblioteca, ma anche compreso DLL per rendere più facile per le persone in modo che non devono compilare tutto se stessi.

La mia biblioteca è molto semplicistico nei tipi esso riferimenti, l'unica vera dipendenza sembra essere .NET 3.0 o superiore (in quanto si riferisce alla Func<T> e simili).

Voglio la mia libreria sia usabile da bersagli multipli, tra cui .NET 4.0 server, un server .NET 3.5, Windows Phone 7 Silverlight, normale Silverlight, XNA (Phone), XNA (Windows), e XNA (Xbox 360).

mi assicuro di non utilizzare tutti i tipi che non sono disponibili sulle piattaforme sto targeting, ad esempio HashSet<T> non è disponibile su Windows Phone 7, quindi non lo uso.

dovrò fare diversi progetti e quindi più DLL per ciascuno di questi obiettivi o c'è qualche modo per produrre una DLL comune per tutti di utilizzare?

È stato utile?

Soluzione

C'è stato un discorso al PDC quest'anno a fare questo genere di cose:

Questo è il video e queste sono le diapositive .

Altri suggerimenti

i file di progetto separate con, file di origine comuni condivisi è la strada da percorrere. Assicurarsi che i progetti siano impostati per la costruzione di diverse cartelle di output (ad esempio non \bin\Debug, ma \CF\bin\debug) per evitare fastidi quando si consumano la libreria da bersagli multipli (come un progetto di desktop e dispositivo).

Il OpenNETCF.IoC quadro è un esempio di questo - sostiene il desktop, CF, Windows Phone e MonoTouch tutti con gli stessi file di origine, ma i file di progetto separato per ogni piattaforma. Cercando di compilare in un unico gruppo binaria che è utilizzabile su tutti loro era troppo disordinato e difficile da mantenere.

Il principale punto di dolore qui sta mantenendo tutti i file di progetto in sincronia quando si aggiunge / file di cambiamento e fare in modo tutti loro compilazione sempre. Un server di build può fare che se si ha accesso a automazione (che Codeplex purtroppo non espone).

che faccio qualcosa di simile con una libreria che gli obiettivi .NET e Silverlight. Ho un unico insieme di file sorgente e file di progetto separati che puntano agli stessi file condivisi.

A volte uso la compilazione condizionale per includere funzionalità solo per .NET e non Silverlight, o per sfruttare le funzionalità disponibili in .NET che portano ad un'implementazione più bello e un'implementazione ripiego per Silverlight dove ha lacune.

Lo stesso approccio potrebbe essere utilizzato per le altre piattaforme di cui parli -. Un insieme di file di origine, ma un file di progetto separato per bersaglio piattaforma

Se si utilizza uno strumento di build come MSBuild o Nant, è quindi possibile avere il prodotto di compilazione tutte le DLL per tutte le piattaforme di destinazione quando si esegue lo script.

Guardate il portatile Biblioteca Strumenti (Ultimo aggiornamento: 2011/06/17) estensione da BLC team (Microsoft) e questa introduzione MSDN articolo (Ultimo aggiornamento: agosto 2011).

Vorrei suggerire una libreria per ciascuna piattaforma. Mi spiego.

Diciamo che il .NET Framework completa comprende una serie di caratteristiche, metodi che non fanno parte del .NET Compact Framework di quello che si può trovare con Windows CE e smartphone. Così, al fine di sfruttare appieno l'intero carico di possibilità di ogni piattaforma, vorrei sfruttare un sacco libreria comune di interfacce, allora si implementano queste interfacce all'interno di una libreria di classi .NET Framework platform specific che vi permetteranno di sfruttare appieno su ciò che viene offerto su una piattaforma specifica.

D'altra parte, se il riutilizzo di codice comune, e per il bene di manutenibilità, si potrebbe preferire di andare con una singola libreria "do-li-tutti". In tali requisiti, è necessario essere pienamente consapevoli di ciascuna delle differenze tra le molte piattaforme che si desidera il supporto.

Questa è ovviamente una importante analisi e l'architettura domanda, come sia soffriranno le carenze di una piattaforma sopra l'altro.

Ecco come vorrei procedere di fronte a tale situazione un:

  1. vorrei indagare le differenze tra la piattaforma specifica di .NET Framework;
  2. I avrebbe messo da parte tutti (se necessario) oggetti comuni si pensa che potrebbe essere necessario;
  3. vorrei evidenziare le differenze, cioè, gli oggetti è possibile utilizzare in una piattaforma, ma non l'altro;

Si tratta di un'analisi organica si dovrà eseguire per vedere cosa seguirà.

Questo è, per una sorta di approccio cascata.


Per quanto riguarda un approccio Scrum, se così si può dire come questo suggerisce l'empirismo, direi provare una singola libreria comune per tutti loro, e vedere cosa si può fare. Se vi imbattete in alcune cose che assolutamente non si può fare, allora potrebbe essere rilevante per creare solo un'altra libreria di classi che dipendono dal vostro "-tutto fare-loro" biblioteca in modo che si dispone di un blocco comune per ogni piattaforma, poi qualche altro specifico librerie per ciò che non si può fare in comune. Farlo, e vedere quali vantaggi avete ottenuto da esso, e trovare un modo fuori dai guai, quando arriva il momento di essere più specifico.

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