TL; DR: quali sono le opzioni al giorno d'oggi per eseguire una soluzione VS2015 su Linux?Esecuzione di un'app .NET in Linux nel 2015
Ho un'applicazione .NET che funziona bene in Windows e ho ricevuto richieste per portarlo su Linux. Ho cercato molto duramente di capire cosa significasse oggi nel 2015, ma sono davvero confuso con tutti i vecchi post che puntano a Mono e ai nuovi post che parlano di vNext (e menziono ancora Mono). Ho anche una buona conoscenza di .NET, ma non ne so molto di Linux in generale ...
Ho seguito un recente tutorial e sono riuscito a compilare ed eseguire un'app della console Hello World in Linux. Ciò ha richiesto l'installazione di alcune cose che non conosco, incluso Mono, e quindi eseguendo alcuni comandi "k" (ripristino di kpm, kpm build, k run). Tuttavia ora non so come passare al mio caso caso reale.
ho una soluzione VS2015 che ha un sacco di progetti, ma solo 4 vale la pena ricordare: - CommonStuff - ServiceCore - ServiceWindows/ServiceConsole
Tutto il codice è nel progetto ServiceCore (libreria di classi) , che ha anch'esso un riferimento a CommonStuff (un'altra libreria di classi). ServiceWindows è un progetto di servizio Windows che chiama semplicemente la funzione Main di ServiceCore e ServiceConsole fa la stessa cosa ma in un'app console (per motivi di debug, poiché non è possibile eseguire il debug di un progetto di servizio Windows da Visual Studio).
Sia CommonStuff che ServiceCore includono molte librerie .NET e alcune DLL di terze parti. Nessun codice specifico di Windows, tuttavia, niente pinvoke o roba funky.
Se consideriamo ServiceConsole come l'app che voglio eseguire su Linux, cosa devo fare per realizzarlo? Compilare Hello World era una cosa ma ora, con tutti quei riferimenti ... Non so da dove cominciare. Inoltre, non posso nemmeno avere il codice da compilare in Linux (codice proprietario), quindi ho bisogno che il codice da compilare in Windows e il dll/exe compilato per essere eseguito direttamente in Linux - è qualcosa che è possibile? Ho visto alcuni post che dicono che Mono può eseguire applicazioni compilate, ma ogni Mono turorial che ho visto inizia con la compilazione. Inoltre non sono sicuro di cosa sia questo vNext. Leggo cose sulla capacità di eseguire codice in Linux se è destinato a .net 6 ... ma non ho idea di come o cosa significhi.
Apprezzerei molto se qualcuno potesse prendere del tempo per spiegare in alcuni dettagli quali sono le opzioni al giorno d'oggi e se è realistico per un'applicazione professionale o se è ancora buono solo per Hello Worlds.
Grazie
EDIT: Ok così sembra posso compilare il mio codice in VS e in qualche modo eseguirlo su Linux utilizzando Mono - come?
_ "Servizio Windows [...] niente specifico per Windows" _ non calcola. Vedi [Come migrare un'applicazione di servizio Windows .NET a Linux usando mono?] (Http://stackoverflow.com/questions/637948/how-to-migrate-a-net-windows-service-application-to-linux- using-mono). vNext o ASP.NET 5 è la prossima cosa per le applicazioni web, quindi non pertinente alla tua situazione. Non posso aiutarti oltre, non ho provato a eseguire .NET su Mono oltre "Hello, World!" anche. – CodeCaster
Codice I.Net/Mono applicazioni orientate ai servizi su OS-X e distribuire i CIL risultanti alla piattaforma Windows e Linux per tutto il tempo ... Questa domanda è così generale che non può essere data una risposta diretta. Mono è una valida piattaforma CLR per eseguire applicazioni xplat, sì ... Oltre 'Hello World', sì, App professionali? sì, certo, ecc. Le risposte reali saranno basate sulla tua applicazione, sul tuo codice, sull'esperienza utente richiesta, sui requisiti della piattaforma, ecc ... Hai dichiarato che non stai usando InterOp non gestito, ma quale codice specifico per Windows, se ce ne sono, usa il tuo servizio, ecc ... – SushiHangover
Non penso che sia così importante che sia un servizio di Windows. È solo un codice che eseguo come servizio di Windows, ma come ho detto, potrebbe essere eseguito come un'applicazione di console. Per essere più specifici, lo scopo dell'applicazione è quello di attendere le richieste in attesa (ricevute tramite SignalR, quindi websockets o polling lungo) e quindi connettersi ad alcuni database (ad esempio mysql, gestito da dll di terze parti) per inviare finalmente i dati a un nostro servizio web. L'unica cosa specifica per Windows è scrivere nei registri di Windows, ma posso sostituirlo facilmente con la scrittura su qualche file per Linux. – Nicolas