Come si usa Travis-CI con C # o F #


91

Il servizio di integrazione continua di Travis CI supporta ufficialmente molti linguaggi , ma non C # o F #.

Posso usarlo con i miei progetti .net?

Risposte:


16

Travis CI ora supporta C # . Citando liberamente da quella pagina:

Panoramica

La configurazione per i progetti C #, F # e Visual Basic ha questo aspetto:

language: csharp
solution: solution-name.sln
mono:
  - latest
  - 3.12.0
  - 3.10.0

Script

Per impostazione predefinita, Travis eseguirà xbuild nome-soluzione.sln. Xbuild è uno strumento di compilazione progettato per essere un'implementazione per lo strumento MSBuild di Microsoft. Per sovrascriverlo, puoi impostare l'attributo script in questo modo:

language: csharp
solution: solution-name.sln
script: ./build.sh

NuGet

Per impostazione predefinita, Travis eseguirà il ripristino di nuget nome-soluzione.sln, che ripristina tutti i pacchetti NuGet dal file della soluzione. Per sovrascriverlo, puoi impostare l'attributo di installazione in questo modo:

language: csharp
solution: solution-name.sln
install:
  - sudo dosomething
  - nuget restore solution-name.sln

questa è LA risposta. Breve e succinto.
vidstige

150

Vedi la risposta di danielnixon per il modo ufficiale per farlo ora.

È possibile.

1. Il tuo progetto deve funzionare su Mono

Sulla tua macchina mono, utilizzando il terminale, cdnella directory della soluzione ed eseguendo il comando xbuild. Questo potrebbe funzionare automaticamente, o potrebbe non funzionare, poiché ci sono funzionalità che hai usato in Visual Studio che richiedono qualche ritocco in mono.

Cose a cui prestare attenzione:

  • Errori di file mancanti, verifica che le maiuscole / minuscole nei nomi dei file corrispondano al tuo .csproj Linux ha percorsi sensibili al maiuscolo / minuscolo mentre Windows no.
  • Nuget ti richiede di farlo export EnableNuGetPackageRestore=trueprima di correrexbuild se il tuo progetto si ripristina automaticamente.
  • La tua istanza mono potrebbe non avere certificati SSL di root, usa mozroots --import --sync per installarli.
  • Inoltre, se vedi errori di file mancanti, nuget.*invece diNuGet.* riferimenti nel tuo .csproj sono stati conosciuti per esistere in varie versioni di nuget.
  • C'è un bug nel file di destinazione di 2.5 nuget basato sugli spazi nel file .target, soluzione alternativa qui
  • Per il supporto di FSharp 3.0 è necessario mono 3.0.X o successivo (e potrebbe essere necessario compilare dal codice sorgente, ma installato di default su Mac OS X)
  • Per i progetti FSharp da VS2013, potrebbe essere necessario modificare il tuo .fsprojper attivare la configurazione di VS2012 su macchine non Windows aggiungendo '$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT'vedi esempio .

Mono 3.1.12, 3.2.4 e versioni successive

  • Mono 3.1.2, 3.2.4 e versioni successive supportano pcl, ma possono anche avere gli errori PCL mancanti. Cerca l'errore elencato di seguito in Mono 3.0.12 poiché include solo i seguenti riferimenti al framework:
    • v4.0, Profile136 .NET Framework 4, Silverlight 5, Windows Phone 8, app di Windows Store (Windows 8)
    • v4.0, Profile14 .NET Framework 4, Silverlight 5
    • v4.0, Profile147 .NET Framework 4.0.3, Silverlight 5, Windows Phone 8, app di Windows Store (Windows 8)
    • v4.0, Profile158 .NET Framework 4.5, Silverlight 5, Windows Phone 8, app di Windows Store (Windows 8)
    • v4.0, Profile19 .NET Framework 4.0.3, Silverlight 5
    • v4.0, Profile24 .NET Framework 4.5, Silverlight 5
    • v4.0, Profile37 .NET Framework 4, Silverlight 5, app di Windows Store (Windows 8)
    • v4.0, Profile42 .NET Framework 4.0.3, Silverlight 5, app di Windows Store (Windows 8)
    • v4.0, Profile47 .NET Framework 4.5, Silverlight 5, app di Windows Store (Windows 8)
    • v4.0, Profile5 .NET Framework 4, app di Windows Store (Windows 8)
    • v4.0, Profile6 .NET Framework 4.0.3, app di Windows Store (Windows 8)
    • v4.5, Profile49 .NET Framework 4.5, Windows Phone 8
    • v4.5, Profile7 .NET Framework 4.5, app di Windows Store (Windows 8)
    • v4.5, Profile78 .NET Framework 4.5, Windows Phone 8, app di Windows Store (Windows 8)

Mono 3.0.12

  • Mono 3.0.12 ha le destinazioni per le librerie di classi portabili ma non gli assembly di riferimento. Cerca le condizioni d' Unable to find framework corresponding to the target framework moniker '.NETPortable,Version=v4.0,Profile=ProfileX'. Framework assembly references will be resolved from the GAC, which might not be the intended behavior.uso della piattaforma (menzionate in Mono 3.0.11 o versioni precedenti ) o esegui l' aggiornamento a 3.1.2.

Mono 3.0.11 o versioni precedenti

  • Errori di destinazione mancante, se non è nuget, probabilmente è perché stai utilizzando una destinazione della libreria di classi portatile o un'altra destinazione che non esiste. Se il tuo progetto può essere compilato per .net 4.0, puoi modificare il tuo .csproj o .fsproj, in modo che su .net sia portatile e su mono per .net 4.0. fondamentalmente separando le cose in gruppi di proprietà condizionali <PropertyGroup Condition="$(OS) == 'Windows_NT'"> <TargetFrameworkProfile>Profile46</TargetFrameworkProfile> </PropertyGroup>o Condition="$(OS) != 'Windows_NT'per mono. Il tuo chilometraggio può variare. Vedi esempio di lavoro .

Mono 2.10.X

  • Anche in Mono v2.10 mancano alcune delle sue classi Microsoft.Build di cui Nuget ha bisogno, puoi copiare la dll v3.0.X, che è molto piccola, nella directory .nuget. (L'ho usato qui )

2. Essere in grado di eseguire unit test dalla riga di comando.

.ci/nunit.shè il mio script di shell per il test di nunit, archiviato nella radice del repository. Quindi posso installare la versione nunit-console che desidero con nuget e configurare anche varie inclusioni / esclusioni di categorie. Il tuo chilometraggio può variare, ma questa tecnica dovrebbe funzionare per xunit ecc. Oppure fai le tue cose con xbuild o fake .

.ci / nunit.sh

#!/bin/sh -x

mono --runtime=v4.0 .nuget/NuGet.exe install NUnit.Runners -Version 2.6.1 -o packages

runTest(){
    mono --runtime=v4.0 packages/NUnit.Runners.2.6.1/tools/nunit-console.exe -noxml -nodots -labels -stoponerror $@
   if [ $? -ne 0 ]
   then   
     exit 1
   fi
}

#This is the call that runs the tests and adds tweakable arguments.
#In this case I'm excluding tests I categorized for performance.
runTest $1 -exclude=Performance

exit $?

3. Configurare Travis per mono

Mono v3.8.0

Per testare l'ultimo mono è più facile usare gli host Mac (target utilizzando language:objective-cMono v3.1.2 e successivamente modificato la distribuzione su un Mac da un DMG a solo un PKG, quindi l'installazione è abbastanza semplice. Questo modello dovrebbe supportare Portable Class Libraries, .NET 4.5.1 e FSharp 3.1.

language: objective-c

env:
 global:
  - EnableNuGetPackageRestore=true 
 matrix:
  - MONO_VERSION="3.8.0"

before_install:
 - wget "http://download.mono-project.com/archive/${MONO_VERSION}/macos-10-x86/MonoFramework-MDK-${MONO_VERSION}.macos10.xamarin.x86.pkg"
 - sudo installer -pkg "MonoFramework-MDK-${MONO_VERSION}.macos10.xamarin.x86.pkg" -target /

script:
 - xbuild 
 - .ci/nunit.sh Tests/bin/Debug/Tests.dll

Per scegliere come target sia Mono v2.10.X che v3.0.X

È facile usare host Mac per configurare una matrice di build per più versioni di Mono. Vedere lo script di seguito

language: objective-c

env:
 global:
  - EnableNuGetPackageRestore=true 
 matrix:
  - MONO_VER="2.10.11"
  - MONO_VER="3.0.12"

before_install:
 - wget "http://download.mono-project.com/archive/${MONO_VER}/macos-10-x86/MonoFramework-MDK-${MONO_VER}.macos10.xamarin.x86.dmg"
 - hdid "MonoFramework-MDK-${MONO_VER}.macos10.xamarin.x86.dmg"
 - sudo installer -pkg "/Volumes/Mono Framework MDK ${MONO_VER}/MonoFramework-MDK-${MONO_VER}.macos10.xamarin.x86.pkg" -target /

script:
 - xbuild 
 - .ci/nunit.sh Tests/bin/Debug/Tests.dll

Per linux

E ora dovresti essere a posto per usare Travis nel tuo progetto c #.


22
Questa è probabilmente una delle migliori risposte che abbia mai visto su questo sito.
Michael Grassman

Ciao, sto provando a costruire un progetto fx4.5 di Travis CI, ma non sudo installer -pkg. Potrebbe aiutarmi a risolverlo? Grazie! vedi, travis-ci.org/Aimeast/TestForFirst/builds/13814315
Aimeast

language: objective-cè necessario per quel modello, in modo che utilizzi l'host OS X.
jbtule

Ricevo errori CS0246 ("impossibile trovare il nome del tipo o dello spazio dei nomi") per ServiceBus, Queue e BrokeredMessage. Qualche idea?
saiyancoder

@Mati è quel Windows Azure? Io non credo che sia mono compatibile, ma scommetto che funzionerà facilmente su AppVeyor stackoverflow.com/a/19164665/637783
jbtule

25

Questo è il punto chiave: il progetto deve funzionare su Mono. Funziona principalmente per progetti in stile libreria ( AWS SDK .NET è un buon esempio) sebbene richieda maggiori sforzi di sviluppo e disciplina. L'ambiente di costruzione Linux non funzionerà se stai sviluppando un progetto per la piattaforma Windows come l'applicazione WPF, il servizio cloud di Azure, l'app Windows Phone / Store o anche l'API Web ASP.NET.

AppVeyor CI è un servizio di integrazione continua ospitato per la piattaforma Windows ed è gratuito per i progetti open source. È come Travis CI per Windows!

È possibile configurare il processo di compilazione per la soluzione VS.NET, il progetto MSBuild personalizzato, PSake o qualsiasi script PowerShell del file batch. Inoltre, AppVeyor dispone di un framework di distribuzione e gestione degli artefatti integrato.


2
@jbtule Sebbene non sia una risposta diretta alla domanda, fornisce un valore, poiché alcuni visitatori di questa domanda (io per esempio) potrebbero essere interessati sia a build server per .net sia su piattaforme mono e MS .net.
steenhulthin

1
Ib Oltre a questo post, wercker ha recentemente lanciato anche il supporto .NET nativo: blog.wercker.com/2013/10/25/…
pjvds

AppVeyor CI mi dà un errore 503 quando premo il link "registrati". Non una buona prima impressione ...
Dan Esparza

4
+1 per AppVeyor, di recente ho impostato due definizioni di build per un'applicazione .NET 4.5 ed è molto semplice da configurare e offre molta flessibilità. Anche il supporto è molto reattivo, ho segnalato un bug ed è stato risolto e messo in produzione in meno di 24 ore.
J c

8

Come già accennato, Travis CI ha il supporto beta per C # . È semplice da usare. Anche nunit può essere integrato molto facilmente. Ecco un piccolo esempio di un file .travis.yml che esegue test nunit e contrassegna la compilazione come non riuscita se almeno uno unit test fallisce:

language: csharp
solution: ./src/yoursolution.sln

install:
  - sudo apt-get install nunit-console
  - nuget restore ./src/yoursolution.sln

script:
  - xbuild ./src/yoursolution.sln
  - nunit-console ./src/SomeLibrary.Tests/bin/Debug/SomeLibrary.Tests.dll

Grazie, usando questa configurazione sono stato in grado di eseguirlo su travis la prima volta (problema GH con maggiori dettagli github.com/o2platform/FluentSharp/issues/… )
Dinis Cruz

Questo mi ha aiutato così tanto grazie! L'unica cosa che ho aggiunto è stata sudo: requiredalla fine. Funziona come un fascino.
w0ns88

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.