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

Travis CI Continuous Integration Service unterstützt offiziell viele Sprachen , jedoch nicht C # oder F #.

Kann ich es mit meinen .net-Projekten verwenden?

Travis CI unterstützt jetzt C # . Auf dieser Seite großzügig 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 konzipiert wurde. Um dies zu überschreiben, können Sie das Skriptattribut folgendermaßen einstellen:

 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 

Sehen Sie die Antwort von Danielnixon für den offiziellen Weg, dies jetzt zu tun.

Es ist möglich.

1. Ihr Projekt muss mit Mono arbeiten

cd Auf Ihrem eigenen Mono-Computer mit dem Terminal in Ihr Lösungsverzeichnis xbuild und den Befehl xbuild . Dies funktioniert möglicherweise automatisch oder auch nicht, da einige functionen, die Sie in Visual Studio verwendet haben, einige Anpassungen in Mono erfordern.

Dinge, auf die Sie achten sollten:

  • Fehlende .csproj sicher, dass die Groß- / Kleinschreibung der Dateinamen mit Ihrem .csproj Linux .csproj .
  • Nuget erfordert, dass Sie export EnableNuGetPackageRestore=true bevor Sie xbuild wenn Ihr Projekt automatisch wiederhergestellt wird.
  • Ihre Mono-Instanz verfügt möglicherweise nicht über Root-SSL-Zertifikate. Installieren Sie sie mit mozroots --import --sync .
  • Auch wenn Sie fehlende nuget.* sehen, sind nuget.* Anstelle von NuGet.* -Referenzen in Ihrem .csproj in verschiedenen Versionen von Nuget bekannt.
  • Es gibt einen Fehler in der Zieldatei der 2.5-Nuget-Datei, die auf Leerzeichen in der .target-Datei basiert. Hier finden Sie die Problemumgehung
  • Für die Unterstützung von FSharp 3.0 benötigen Sie Mono 3.0.X oder höher (und müssen möglicherweise von der Quelle aus erstellt, aber standardmäßig unter Mac OS X installiert werden).
  • Für FSharp-Projekte von VS2013 müssen Sie möglicherweise Ihre .fsproj Datei bearbeiten, um die VS2012-Konfiguration auf Nicht-Windows-Maschinen auszulösen, indem Sie '$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT' Siehe Beispiel .

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 aufgeführten Fehler unter Mono 3.0.12, 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
    • Apps v5.0, Profile7 .NET Framework 4.5, Windows Store (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 hat die Ziele für Portable Class Libraries, nicht jedoch die Referenzassemblys. Suchen Sie 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. 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. Verwenden Sie Plattformbedingungen (erwähnt unter Mono 3.0.11 oder früher ) oder aktualisieren Sie auf 3.1.2.

Mono 3.0.11 oder früher

  • Fehlende Zielerrors. Wenn dies nicht Nuget ist, liegt dies wahrscheinlich daran, dass Sie ein Ziel der Portable-classnbibliothek oder ein anderes nicht vorhandenes Ziel verwenden. Wenn Ihr Projekt für .net 4.0 kompilieren kann, können Sie .csproj oder .fsproj so ändern, dass es auf .net tragbar ist und auf Mono für .net 4.0. Im Wesentlichen durch getrennte Profile46 in bedingte Eigenschaftsgruppen Profile46 oder Condition="$(OS) != 'Windows_NT' für Mono: Ihre Laufleistung kann variieren. Siehe Arbeitsbeispiel.

Mono 2.10.X

  • In Mono v2.10 fehlen einige seiner Microsoft.Build-classn, die Nuget benötigt. Sie können die sehr kleine DLL v3.0.X in das Verzeichnis .nuget kopieren. (Ich habe es hier benutzt )

2. Sie können Gerätetests von der Befehlszeile aus ausführen.

.ci/nunit.sh ist mein eigenes Shell-Skript für Nunit-Tests, das in der Wurzel des .ci/nunit.sh ist. So kann ich die nun mit Nuget gewünschte Nunit-Console-Version installieren und auch verschiedene Ein- / Ausschlüsse von Kategorien konfigurieren. Ihre Laufleistung 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 Monos ist es am einfachsten, Mac-Hosts zu verwenden (Zielsprache language:objective-c object language:objective-c Mono v3.1.2 und später die Verteilung auf einem Mac von einer DMG zu einer PKG geändert, sodass die Installation recht einfach ist. Diese Vorlage sollte Portable unterstützen classnbibliotheken, .NET 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 für Mono v2.10.X und v3.0.X

Es ist einfach, Mac-Hosts zu verwenden, um eine Build-Matrix für mehrere Mono-Versionen einzurichten. Siehe unten stehendes Skript

 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

  • Antwort unten für neue Beta-Definition.

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

Das ist der Schlüsselpunkt – 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 WPF-Anwendung, Azure-Cloud-Dienst, Windows Phone / Store-App oder sogar ASP.NET-Web-API entwickeln.

AppVeyor CI ist ein gehosteter fortlaufender 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 eine VS.NET-Lösung, ein benutzerdefiniertes MSBuild-Projekt, PSake oder ein beliebiges PowerShell-Skript für die Stapeldatei einrichten. Darüber hinaus verfügt AppVeyor über ein integriertes Framework für die Verwaltung und Bereitstellung von Artefakten.

Wie bereits erwähnt, hat Travis CI Beta- Unterstützung für C # . Es ist einfach zu benutzen. Nun kann nun auch 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 kennzeichnet, wenn mindestens ein Unit-Test 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 

Wenn Sie Travis CI mit F #, auf GitHub, mit FAKE und Packet verwenden möchten, wird der F # ProjectScaffold empfohlen:

http://fsprojects.github.io/ProjectScaffold