web-dev-qa-db-fra.com

Comment utiliser Travis-CI avec C # ou F #

Le service d'intégration continue Travis CI prend officiellement en charge de nombreux langues , mais pas C # ou F #.

Puis-je l'utiliser avec mes projets .net?

89
jbtule

Travis CI maintenant prend en charge C # . Citant généreusement de cette page:

Présentation

La configuration pour les projets C #, F # et Visual Basic ressemble à ceci:

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

Scénario

Par défaut, Travis exécutera xbuild solution-name.sln. Xbuild est un outil de construction conçu pour être une implémentation de l'outil MSBuild de Microsoft. Pour remplacer cela, vous pouvez définir l'attribut de script comme ceci:

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

NuGet

Par défaut, Travis exécutera nuget restore solution-name.sln, qui restaure tous les packages NuGet à partir de votre fichier de solution. Pour remplacer cela, vous pouvez définir l'attribut d'installation comme ceci:

language: csharp
solution: solution-name.sln
install:
  - Sudo dosomething
  - nuget restore solution-name.sln
14
danielnixon

Voir réponse de danielnixon pour la manière officielle de le faire maintenant.

C'est possible.

1. Votre projet doit fonctionner sur Mono

Sur votre propre machine mono, à l'aide du terminal, cd dans votre répertoire de solution et exécutez la commande xbuild. Cela peut fonctionner automatiquement ou non, car il existe des fonctionnalités que vous avez utilisées dans Visual Studio qui nécessitent quelques ajustements en mono.

À surveiller:

  • Erreurs de fichiers manquants, assurez-vous que la casse des noms de fichiers correspond à votre .csproj Linux a des chemins sensibles à la casse où Windows ne le fait pas.
  • Nuget vous oblige à export EnableNuGetPackageRestore=true Avant d'exécuter xbuild si la restauration automatique de votre projet.
  • Votre instance mono peut ne pas avoir de certificats SSL racine, utilisez mozroots --import --sync Pour les installer.
  • De plus, si vous voyez des erreurs de fichier manquantes, les références nuget.* Au lieu de NuGet.* Dans votre .csproj sont connues pour exister dans différentes versions de nuget.
  • Il y a un bogue dans le fichier cible de 2.5 nuget basé sur les espaces dans le fichier .target, solution ici
  • Pour la prise en charge de FSharp 3.0, vous avez besoin de mono 3.0.X ou version ultérieure (et peut-être besoin de construire à partir de la source, mais installé par défaut sur Mac OS X)
  • Pour les projets FSharp de VS2013, vous devrez peut-être modifier votre .fsproj Pour déclencher la configuration VS2012 sur des machines non Windows en ajoutant '$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT' voir exemple .

Mono 3.1.12, 3.2.4 et versions ultérieures

  • Mono 3.1.2, 3.2.4 et versions ultérieures prennent en charge pcl, mais peuvent également contenir les erreurs PCL manquantes. Recherchez l'erreur répertoriée ci-dessous sous Mono 3.0.12 car elle inclut uniquement les références de framework suivantes:
    • v4.0, Profile136 . NET Framework 4, Silverlight 5, Windows Phone 8, applications du 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, applications du Windows Store (Windows 8)
    • v4.0, Profile158 . NET Framework 4.5, Silverlight 5, Windows Phone 8, applications du 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, applications Windows Store (Windows 8)
    • v4.0, Profile42 . NET Framework 4.0.3, Silverlight 5, applications Windows Store (Windows 8)
    • v4.0, Profile47 . NET Framework 4.5, Silverlight 5, applications du Windows Store (Windows 8)
    • v4.0, Profile5 . NET Framework 4, applications du Windows Store (Windows 8)
    • v4.0, Profile6 . NET Framework 4.0.3, applications du Windows Store (Windows 8)
    • v4.5, Profile49 . NET Framework 4.5, Windows Phone 8
    • v4.5, Profile7 . NET Framework 4.5, applications Windows Store (Windows 8)
    • v4.5, Profile78 . NET Framework 4.5, Windows Phone 8, applications Windows Store (Windows 8)

Mono 3.0.12

  • Mono 3.0.12 a les cibles pour les bibliothèques de classes portables mais pas les assemblys de référence. Recherchez 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. Utilisez les conditions de la plate-forme (mentionnées sous Mono 3.0.11 ou version antérieure ) ou mettez à niveau vers 3.1.2.

Mono 3.0.11 ou version antérieure

  • Erreurs de cible manquante, si ce n'est pas un nuget, c'est probablement parce que vous utilisez une cible de bibliothèque de classes portable ou une autre cible qui n'existe pas. Si votre projet peut compiler pour .net 4.0, vous pouvez modifier votre .csproj ou .fsproj, de sorte que sur .net il soit portable et sur mono qu'il soit construit pour .net 4.0. essentiellement en séparant les choses en groupes de propriétés conditionnelles <PropertyGroup Condition="$(OS) == 'Windows_NT'"> <TargetFrameworkProfile>Profile46</TargetFrameworkProfile> </PropertyGroup> ou Condition="$(OS) != 'Windows_NT' pour mono. Votre kilométrage peut varier. Voir travail exemple .

Mono 2.10.X

  • De plus, Mono v2.10 manque certaines de ses classes Microsoft.Build dont Nuget a besoin, vous pouvez copier la dll v3.0.X, qui est très petite, dans le répertoire .nuget. (Je l'ai utilisé ici )

2. Pouvoir exécuter des tests unitaires à partir de la ligne de commande.

.ci/nunit.sh Est mon propre script Shell pour les tests d'unité, archivé à la racine du dépôt. Ainsi, je peux installer la version nunit-console que je veux avec nuget, et configurer également diverses inclusions/exclusions de catégories. Votre kilométrage peut varier, mais cette technique devrait fonctionner pour xunit etc. Ou faites votre propre chose avec xbuild ou faux .

.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. Configurer Travis pour mono

Mono v3.8.0

Pour tester la dernière version mono, il est plus facile d'utiliser des hôtes Mac (ciblez en utilisant language:objective-c Mono v3.1.2 et plus tard, la distribution a changé sur un Mac d'un DMG à un PKG donc l'installation est assez simple. Ce modèle devrait prendre en charge Bibliothèques de classes portables, .NET 4.5.1 et 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

Pour cibler Mono v2.10.X et v3.0.X

Il est facile d'utiliser des hôtes Mac pour configurer une matrice de construction pour plusieurs versions de Mono. Voir le script ci-dessous

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

Pour linux

Et maintenant, vous devriez être prêt à utiliser travis sur votre projet c #.

149
jbtule

C'est le point clé - le projet doit fonctionner sur Mono. Cela fonctionne principalement pour les projets de style bibliothèque ( AWS SDK .NET est un bon exemple) mais nécessite plus d'efforts de développement et de discipline. L'environnement de construction Linux ne fonctionnera pas si vous développez un projet pour une plate-forme Windows telle qu'une application WPF, un service cloud Azure, une application Windows Phone/Store ou même une API Web ASP.NET.

AppVeyor CI est un service d'intégration continue hébergé pour la plate-forme Windows et il est gratuit pour les projets open source. C'est comme Travis CI pour Windows!

Vous pouvez configurer le processus de génération pour la solution VS.NET, le projet MSBuild personnalisé, PSake ou tout script PowerShell de fichier de commandes. En outre, AppVeyor a intégré la gestion des artefacts et le cadre de déploiement.

25
Feodor Fitsner

Comme déjà mentionné, Travis CI a une version bêta prise en charge de C # . C'est simple à utiliser. La nunit peut également être intégrée très facilement. Voici un petit exemple d'un fichier .travis.yml qui exécute des tests d'unité et marque la construction comme ayant échoué si au moins un test unitaire échoue:

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
8
Roemer

Si vous souhaitez utiliser Travis CI avec F #, sur GitHub, avec FAKE et Packet, alors le F # ProjectScaffold est recommandé:

http://fsprojects.github.io/ProjectScaffold

1
Andrew Olney