Wie verwende ich Travis-CI mit C # oder F #?

91

Der kontinuierliche Integrationsdienst von Travis CI unterstützt offiziell viele Sprachen , jedoch nicht C # oder F #.

Kann ich es mit meinen .net-Projekten verwenden?

jbtule
quelle

Antworten:

16

Travis CI unterstützt jetzt C # . Frei von dieser Seite zitieren:

Überblick

Das Setup für C # -, F # - und Visual Basic-Projekte sieht folgendermaßen aus:

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

Skript

Standardmäßig führt Travis xbuild solution-name.sln aus. Xbuild ist ein Build-Tool, das als Implementierung für das MSBuild-Tool von Microsoft entwickelt wurde. Um dies zu überschreiben, können Sie das Skriptattribut wie folgt festlegen:

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

NuGet

Standardmäßig führt Travis nuget restore solution-name.sln aus, wodurch alle NuGet-Pakete aus Ihrer Lösungsdatei wiederhergestellt werden. Um dies zu überschreiben, können Sie das Installationsattribut wie folgt festlegen:

language: csharp
solution: solution-name.sln
install:
  - sudo dosomething
  - nuget restore solution-name.sln
Danielnixon
quelle
das ist die Antwort. Kurz und prägnant.
Vidstige
150

Siehe Danielnixons Antwort für den offiziellen Weg, dies jetzt zu tun.

Es ist möglich.

1. Ihr Projekt muss an Mono arbeiten

Auf Ihrem eigenen Mono-Computer mithilfe des Terminals cdin Ihr Lösungsverzeichnis und Ausführen des Befehls xbuild. Dies funktioniert möglicherweise automatisch oder nicht, da es Funktionen gibt, die Sie in Visual Studio verwendet haben und die in Mono angepasst werden müssen.

Dinge, auf die Sie achten sollten:

  • Wenn fehlende .csprojDateifehler vorliegen , überprüfen Sie, ob der Fall von Dateinamen mit Ihrem Linux übereinstimmt. Dabei handelt es sich um Pfade mit Groß- und Kleinschreibung, bei denen Windows dies nicht tut.
  • Nuget muss export EnableNuGetPackageRestore=truevor dem Ausführen ausgeführt werden, xbuildwenn Ihr Projekt automatisch wiederhergestellt wird.
  • Ihre Mono-Instanz verfügt möglicherweise nicht über Root-SSL-Zertifikate. Verwenden Sie diese mozroots --import --sync, um sie zu installieren.
  • Auch wenn Sie fehlende Dateifehler sehen, ist bekannt, dass nuget.*anstelle von NuGet.*Verweisen in Ihrer .csproj in verschiedenen Versionen von Nuget vorhanden ist.
  • Es gibt einen Fehler in der Zieldatei von 2.5 Nuget, der auf Leerzeichen in der Zieldatei basiert. Problemumgehung hier
  • Für die Unterstützung von FSharp 3.0 benötigen Sie Mono 3.0.X oder höher (und müssen möglicherweise aus dem Quellcode erstellt werden, sind jedoch standardmäßig unter Mac OS X installiert).
  • Bei FSharp-Projekten aus VS2013 müssen Sie möglicherweise Ihre bearbeiten .fsproj, um die VS2012-Konfiguration auf Nicht-Windows-Computern auszulösen, indem '$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT'Sie das folgende Beispiel hinzufügen .

Mono 3.1.12, 3.2.4 und höher

  • Mono 3.1.2, 3.2.4 und höher unterstützen pcl, können aber auch die fehlenden PCL-Fehler aufweisen. Achten Sie auf den unten unter Mono 3.0.12 aufgeführten Fehler, da er nur die folgenden Framework-Referenzen enthält:
    • v4.0, Profile136 .NET Framework 4, Silverlight 5, Windows Phone 8, Windows Store-Apps (Windows 8)
    • v4.0, Profile14 .NET Framework 4, Silverlight 5
    • v4.0, Profile147 .NET Framework 4.0.3, Silverlight 5, Windows Phone 8, Windows Store-Apps (Windows 8)
    • v4.0, Profile158 .NET Framework 4.5, Silverlight 5, Windows Phone 8, Windows Store-Apps (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, Windows Store-Apps (Windows 8)
    • v4.0, Profile42 .NET Framework 4.0.3, Silverlight 5, Windows Store-Apps (Windows 8)
    • v4.0, Profile47 .NET Framework 4.5, Silverlight 5, Windows Store-Apps (Windows 8)
    • v4.0, Profile5 .NET Framework 4, Windows Store-Apps (Windows 8)
    • v4.0, Profile6 .NET Framework 4.0.3, Windows Store-Apps (Windows 8)
    • v4.5, Profile49 .NET Framework 4.5, Windows Phone 8
    • v4.5, Profile7 .NET Framework 4.5, Windows Store-Apps (Windows 8)
    • v4.5, Profile78 .NET Framework 4.5, Windows Phone 8, Windows Store-Apps (Windows 8)

Mono 3.0.12

  • Mono 3.0.12 enthält die Ziele für tragbare Klassenbibliotheken, jedoch nicht die Referenzbaugruppen. Suchen Sie nach 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.Nutzungsplattformbedingungen (unter Mono 3.0.11 oder früher erwähnt ) oder aktualisieren Sie auf 3.1.2.

Mono 3.0.11 oder früher

  • Fehlende Zielfehler, wenn es sich nicht um Nuget handelt, liegt dies wahrscheinlich daran, dass Sie ein tragbares Klassenbibliotheksziel oder ein anderes Ziel verwenden, das nicht vorhanden ist. Wenn Ihr Projekt für .net 4.0 kompiliert werden kann, können Sie Ihr .csproj oder .fsproj so ändern, dass es auf .net portabel und auf Mono für .net 4.0 erstellt wird. im Grunde durch getrennte Dinge in bedingte Eigenschaftsgruppen <PropertyGroup Condition="$(OS) == 'Windows_NT'"> <TargetFrameworkProfile>Profile46</TargetFrameworkProfile> </PropertyGroup>oder Condition="$(OS) != 'Windows_NT'für Mono. Ihr Kilometerstand kann variieren. Siehe Arbeits Beispiel .

Mono 2.10.X.

  • Außerdem fehlen in Mono v2.10 einige der von Nuget benötigten Microsoft.Build-Klassen. Sie können die sehr kleine v3.0.X-DLL in das Verzeichnis .nuget kopieren. (Ich habe es hier benutzt )

2. Sie können Unit-Tests über die Befehlszeile ausführen.

.ci/nunit.shist mein eigenes Shell-Skript für Nunit-Tests, das in die Wurzel des Repos eingecheckt ist. So kann ich die gewünschte Nunit-Konsolenversion mit Nuget installieren und auch verschiedene Ein- / Ausschlüsse von Kategorien konfigurieren. Ihr Kilometerstand kann variieren, aber diese Technik sollte für xunit usw. funktionieren. Oder machen Sie Ihr eigenes Ding mit xbuild oder 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. Konfigurieren Sie Travis für Mono

Mono v3.8.0

Zum Testen des neuesten Mono ist es am einfachsten, Mac-Hosts zu verwenden (Ziel mithilfe von language:objective-cMono v3.1.2 und später wurde die Verteilung auf einem Mac von einem DMG in ein PKG geändert, sodass die Installation recht einfach ist. Diese Vorlage sollte Portable Class Libraries, .NET, unterstützen 4.5.1 und 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

Ziel ist sowohl Mono v2.10.X als auch v3.0.X.

Ich verwende einfach Mac-Hosts, um eine Build-Matrix für mehrere Versionen von Mono einzurichten. Siehe Skript unten

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

Für Linux

Und jetzt sollten Sie gut darin sein, Travis für Ihr c # -Projekt zu verwenden.

jbtule
quelle
22
Das ist wahrscheinlich eine der besten Antworten, die ich je auf dieser Seite gesehen habe.
Michael Grassman
Hallo, ich versuche ein fx4.5-Projekt von Travis CI zu erstellen, aber nicht sudo installer -pkg. Könnte mir bitte helfen, das Problem zu beheben? Danke dir! siehe travis-ci.org/Aimeast/TestForFirst/builds/13814315
Aimeast
language: objective-cist für diese Vorlage erforderlich, damit sie den OS X-Host verwendet.
11.
Ich erhalte CS0246-Fehler ("Typ- oder Namespace-Name wurde nicht gefunden") für ServiceBus, Queue und BrokeredMessage. Irgendwelche Ideen?
Saiyancoder
@Mati ist das Windows Azure? Ich denke nicht, dass das monokompatibel ist, aber ich wette, es wird leicht auf AppVeyor stackoverflow.com/a/19164665/637783
jbtule
25

Das ist der entscheidende Punkt - das Projekt muss auf Mono funktionieren. Dies funktioniert hauptsächlich für Projekte im Bibliotheksstil ( AWS SDK .NET ist ein gutes Beispiel), erfordert jedoch mehr Entwicklungsaufwand und Disziplin. Die Linux-Gebäudeumgebung funktioniert nicht, wenn Sie ein Projekt für eine Windows-Plattform wie eine WPF-Anwendung, einen Azure-Clouddienst, eine Windows Phone / Store-App oder sogar eine ASP.NET-Web-API entwickeln.

AppVeyor CI ist ein gehosteter kontinuierlicher Integrationsdienst für die Windows-Plattform und für Open Source-Projekte kostenlos. Es ist wie Travis CI für Windows!

Sie können den Erstellungsprozess für die VS.NET-Lösung, ein benutzerdefiniertes MSBuild-Projekt, PSake oder ein beliebiges PowerShell-Skript für Batchdateien einrichten. Außerdem verfügt AppVeyor über ein integriertes Framework für die Verwaltung und Bereitstellung von Artefakten.

Feodor Fitsner
quelle
2
@jbtule Obwohl es keine direkte Antwort auf die Frage ist, bietet es einen Wert, da einige Besucher dieser Frage (ich zum Beispiel) möglicherweise an beiden Build-Servern für .net sowohl auf Mono- als auch auf MS .net-Plattformen interessiert sind.
Steenhulthin
1
Zusätzlich zu diesem Beitrag hat wercker kürzlich auch die native .NET-Unterstützung gestartet: blog.wercker.com/2013/10/25/…
pjvds
AppVeyor CI gibt mir einen 503-Fehler, wenn ich auf den Link "Anmelden" klicke. Kein guter erster Eindruck ...
Dan Esparza
4
+1 für AppVeyor habe ich kürzlich zwei Build-Definitionen für eine .NET 4.5-Anwendung eingerichtet. Die Einrichtung ist sehr einfach und sehr flexibel. Der Support ist ebenfalls sehr reaktionsschnell, ich habe einen Fehler gemeldet und er wurde behoben und in weniger als 24 Stunden in die Produktion gebracht.
J c
8

Wie bereits erwähnt, bietet Travis CI Beta- Unterstützung für C # . Ich bin einfach zu bedienen. Auch nunit kann sehr einfach integriert werden. Hier ist ein kleines Beispiel für eine .travis.yml-Datei, die nunit-Tests ausführt und den Build als fehlgeschlagen markiert, wenn mindestens ein Komponententest fehlschlägt:

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
Roemer
quelle
Danke, mit dieser Konfiguration konnte ich sie zum ersten Mal auf Travis ausführen (GH-Problem mit weiteren Details github.com/o2platform/FluentSharp/issues/… )
Dinis Cruz
Das hat mir sehr geholfen, danke! Das einzige, was ich hinzugefügt habe, war sudo: requiredam Ende. Klappt wunderbar.
w0ns88