Domanda

Sto cercando di scrivere del codice C# per Linux/Windows/Mac/qualsiasi altra piattaforma e sto cercando le migliori pratiche per il codice portatile.

Progetto mono ne ha alcuni fantastici porting risorse.

Quali sono le procedure consigliate per il C# portatile?

È stato utile?

Soluzione

In realtà ho usato winforms e andava bene.Era MOLTO BRUTTO, ma ha funzionato.

Ovviamente, non utilizzare P/Invoke o qualsiasi altra cosa di Win32 come il registro.Prestare inoltre attenzione alle DLL di terze parti.Ad esempio, utilizziamo una DLL SQLite di terze parti che in realtà contiene codice nativo che dobbiamo sostituire se vogliamo eseguirlo su OSX/linux.

Altri suggerimenti

Odio il termine "Best practice" perché sembra che alcune pratiche possano essere le migliori in qualsiasi contesto, il che è una cosa rischiosa, ma dirò quella che considero una "Buona pratica" per il codice multipiattaforma (e per la maggior parte altro tipo di sviluppo):

Utilizzare un motore di integrazione continua e costruire sempre per tutte le piattaforme di destinazione.

Sembra troppo complesso?Bene, se hai davvero bisogno di supportare più piattaforme, è meglio farlo.Non importa quanto tu sia attento all'utilizzo del codice e della libreria, se esegui il test troppo tardi, ti ritroverai a passare mouuuuuunque ore a rielaborare grandi porzioni dell'app.

Fai attenzione a qualsiasi cosa abbia a che fare con la manipolazione del nome file e del percorso e utilizza i metodi .NET portatili in System.IO.Path cioè.

invece di:

string myfile = somepath + "\\file.txt";

Fare:

string myfile = Path.Combine(somepath, "file.txt");

Se è necessario specificare un separatore di percorso, utilizzare Path.Separator eccetera

Non utilizzare " " per una nuova riga.Utilizzo Ambiente.NewLine

Ricordare :

  • *NIX utilizza solo il carattere di nuova riga (" ")
  • Windows utilizza " "
  • MacIntosh usa " " (non ne sono del tutto sicuro - sentitevi liberi di correggermi).

LE:Sembra che alcuni MacOS più recenti non utilizzino più il separatore di riga " ".

Non utilizzare Windows.Forms per le GUI, ma Mono probabilmente lo ha già menzionato.Gtk# è molto più coerente e affidabile per le GUI multipiattaforma.

Qualche anno fa ti avrei consigliato di comprarti una copia del mio libro su .NET multipiattaforma, ma poiché il libro è un po' obsoleto ora è necessario attenersi alle informazioni del sito Mono.

IL Analizzatore di mono migrazione (MoMA) Lo strumento è piuttosto utile per analizzare un'applicazione .NET esistente e avvisarti di problemi di portabilità, ma la soluzione migliore per il nuovo codice è utilizzare l'ultima versione stabile di Mono per il tuo lavoro di sviluppo.

Come ha detto Orion, devi fare attenzione quando usi DLL di terze parti, anche se il mio coautore ha scritto un file NativeProbe strumento per analizzare le DLL per le dipendenze P/Invoke se desideri controllare rapidamente il software di terze parti.

Se sei determinato a sviluppare su MS .NET, dovresti provare ad assicurarti di creare e testare unità anche su Mono e dovresti anche fare attenzione a una serie di spazi dei nomi specifici di Windows come gli spazi dei nomi Microsoft.Win32 e System.Management.

Se vuoi che il codice sia portabile, devi rivedere attentamente l'elenco delle funzionalità completate sul sito Mono.Entrano nei dettagli su ciascuna classe del framework e sul livello di completezza.Dovrai prendere in considerazione queste cose durante il processo di progettazione in modo da non andare troppo avanti nel percorso e scoprire che una funzionalità critica non è stata ancora implementata.

Ci sono alcune altre cose semplici.Ad esempio, non assumere caratteri di percorso.O nuove righe.

Sono una delle persone che compila regolarmente NUnit su Mono su Linux o OSX.

Inoltre, non dare per scontato che i compilatori funzionino esattamente allo stesso modo.Recentemente abbiamo riscontrato un problema in cui il compilatore MS C# sembra includere cose che quello di Mono non include, richiedendo riferimenti aggiuntivi nel nostro script di build.

A parte questo, è stato piuttosto semplice.Ricordo la prima volta che siamo arrivati la GUI in esecuzione su Mono/Linux - è stato piuttosto emozionante (anche se era abbastanza brutto)

Un elemento mancante:Assicurati che i nomi dei file facciano distinzione tra maiuscole e minuscole.File.Apri ("MioFile.txt");non funzionerà su Unix se il tuo file si chiama myfile.txt.

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