2013-01-12 12 views
6

Ho Monoserve e Nginx che funzionano perfettamente in Ubuntu, ma devo ancora pubblicare il sito Web localmente su una casella di Windows usando MSBuild e quindi copiare i file.Mono XBuild pubblica sito MVC

Preferibilmente Mi piacerebbe avere un server Linux CI che fa questo utilizzando invece XBuild però posso solo farlo per costruire il progetto in DLL, come faccio a pubblicare e distribuire con js, css, viste, ecc ?

+0

Hai modificato manualmente il file msbuild? – flup

+0

E hai contrassegnato i tuoi file di contenuti con l'azione build Contenuto? – flup

+0

Credo che il seguente link possa aiutare a risolvere questo problema - http://stackoverflow.com/questions/32781983/code-publish-through-jenkins-for-net-mvc-solution-in-ubuntu-machine/32837666#32837666 – user3220129

risposta

8

In genere la parte "build dlls" è la parte più difficile. Se l'hai risolto, sei lì all'80%. L'altra metà sta pubblicando contenuti. Nel suo aspetto più elementare, stai copiando una parte dei file dalla directory di origine alla cartella del sito web. MSDeploy è la risposta di Microsoft ad esso, ed è waaaaaay troppo complesso. Ho creato un task NAnt che esegue questa operazione, sebbene anche questo non si applichi al tuo scenario specifico. Tuttavia, la metodologia generale può:

  1. Scorri il file sln cercando i progetti web. Cosa rende un progetto web? Tecnicamente il guid nel file csproj o id del tipo di progetto nel file sln. Ho barato e definito come "la cartella di destinazione include un file web.config". Se nella tua soluzione hai solo un progetto per un sito Web, puoi saltare questo passaggio e codificare semplicemente il file .csproj.

  2. Scansione del file csproj alla ricerca di nodi <Content Include="some\file.ext" />. XPath potrebbe fare questo, da Linq a XML potrebbe farlo anche tu. Questo ti dà tutti i file .aspx, .cshtml, .js, .css, .png, .config, etc, ecc, lasciando con attenzione tutti i file .cs. Dovrai anteporre il percorso al file .csproj per ottenere il percorso del vero file di origine e assicurarti di conservare la struttura delle cartelle nel percorso di destinazione. Ma questo è banale in confronto alla raccolta della lista dei file.

  3. Ora che avete ottenuto l'elenco dei file, passatelo in loop copiando dalla cartella di origine alla cartella di destinazione. (Probabilmente vuoi svuotare la cartella di destinazione prima o dopo eliminare i file extra dalle distribuzioni precedenti.Io trovo il primo più semplice.) L'unica cosa che il file di ricerca di csproj non ti dava era il contenuto della cartella bin, ma questa è la torta: copia tutto il contenuto della cartella bin. : D (C'è un sano dibattito sull'opportunità o meno di copiare i file PDB, ma io dico di sì.)

Modulo di uno script per fare quanto sopra 3 passi, poi chiamare sia da un compito XBuild oppure chiamare entrambi XBuild e questo script dal processo CI. Poof. Hai un obiettivo di schieramento. Buona programmazione!

+0

Grazie ho fatto uno script di shell per farlo. Funziona magnificamente, ho sempre pensato che fosse troppo complicato per replicare il processo di implementazione. – Dharun

+0

Felice che abbia funzionato così bene. – robrich

0

Preferibilmente Mi piacerebbe avere un server Linux CI che fa questo utilizzando invece XBuild La buona notizia è che si può fare questo con una soluzione che ho trovato in this articolo. Ecco un estratto e il collegamento di soluzione dall'articolo precedente:

Il server di generazione non ha Microsoft MVC (qualsiasi versione) installato. Tuttavia, questo è molto facile da aggirare: Microsoft MVC è disponibile su NuGet al http://nuget.org/packages/Microsoft.AspNet.Mvc se è necessario per installare una versione precedente, fare clic sulla versione precedente nella parte inferiore dello della pagina e verranno fornite le istruzioni su come per installare quella versione del framework.

Spero che sia tutto questo facile per te!

+0

Grazie per il collegamento ma non penso che questo gestirà la distribuzione completa di un sito Web, compilando solo DLL – Dharun

Problemi correlati