Cómo uso Travis-CI con C # o F#


Travis CI continuous integration service soporta oficialmente muchos lenguajes , pero no C# o F#.

¿Puedo usarlo con mis proyectos. net?

Author: jbtule, 2013-05-25

5 answers

Travis CI ahora soporta C#. Citando liberalmente de esa página:

Descripción general

La configuración para los proyectos C#, F # y Visual Basic se ve así:

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

Script

Por defecto Travis ejecutará xbuild solution-name.sln. Xbuild es una herramienta de compilación diseñada para ser una implementación de la herramienta MSBuild de Microsoft. Para anular esto, puede establecer el atributo script de esta manera:

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

NuGet

Por por defecto, Travis ejecutará nuget restore solution-name.sln, que restaura todos los paquetes NuGet de su archivo de solución. Para anular esto, puede establecer el atributo install de la siguiente manera:

language: csharp
solution: solution-name.sln
install:
  - sudo dosomething
  - nuget restore solution-name.sln
 14
Author: danielnixon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-22 13:35:27

Ver la respuesta de danielnixon para la forma oficial de hacer esto ahora.

Es posible.

1. Su proyecto necesita trabajar en Mono

En su propia máquina mono, usando el terminal, cd en su directorio de solución y ejecutando el comando xbuild. Esto puede funcionar automáticamente, o no, ya que hay características que utilizó en visual studio que necesitan algunos ajustes en mono.

Cosas a tener en cuenta:

  • Errores de archivos que faltan, compruebe para asegurarse de que el caso de los nombres de archivo coincide con su .csproj linux tiene rutas sensibles a mayúsculas y minúsculas donde windows no.
  • Nuget requiere que export EnableNuGetPackageRestore=true antes de ejecutar xbuild si su proyecto se restaura automáticamente.
  • Su instancia mono puede no tener certificados SSL raíz, use mozroots --import --sync para instalarlos.
  • También si ve errores de archivo faltantes, nuget.* en lugar de NuGet.* referencias en su .se sabe que csproj existe en varias versiones de nuget.
  • Hay un error en 2.5 nuget del archivo de destino basado en espacios en blanco en el .archivo de destino, solución aquí
  • Para el soporte de FSharp 3.0 necesita mono 3.0.X o posterior (y puede que necesite compilar desde el código fuente, pero instalado de forma predeterminada en Mac OS X)
  • Para los proyectos FSharp de VS2013, es posible que deba editar su .fsproj para activar la configuración de VS2012 en máquinas que no sean windows agregando '$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT' consulte ejemplo.

Mono 3.1.12, 3.2.4 y posteriores

  • Mono 3.1.2, 3.2.4 y posteriores tener soporte pcl, pero también puede tener los errores PCL faltantes. Busque el error que se muestra a continuación en Mono 3.0.12 ya que solo incluye las siguientes referencias de marco:
    • v4. 0, Profile136 . NET Framework 4, Silverlight 5, Windows Phone 8, aplicaciones de la tienda de Windows (Windows 8)
    • v4. 0, Profile14 . NET Framework 4, Silverlight 5
    • v4. 0, Profile147 . NET Framework 4.0.3, Silverlight 5, Windows Phone 8, aplicaciones de la tienda de Windows (Windows 8)
    • v4.0, Profile158 .NET Framework 4.5, Silverlight 5, Windows Phone 8, aplicaciones de la Tienda Windows (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, aplicaciones de la tienda Windows (Windows 8)
    • v4.0, Profile42 .NET Framework 4.0.3, Silverlight 5, aplicaciones de la Tienda Windows (Windows 8)
    • v4.0, Profile47 .NET Framework 4.5, Silverlight 5, aplicaciones de la Tienda Windows (Windows 8)
    • v4. 0, Profile5 . NET Framework 4, aplicaciones de la tienda de Windows (Windows 8)
    • v4.0, Profile6 .NET Framework 4.0.3, aplicaciones de la Tienda Windows (Windows 8)
    • v4. 5, Profile49 . NET Framework 4.5, Windows Phone 8
    • v4.5, Profile7 .NET Framework 4.5, aplicaciones de la Tienda Windows (Windows 8)
    • v4.5, Profile78 .NET Framework 4.5, Windows Phone 8, aplicaciones de la Tienda Windows (Windows 8)

Mono 3.0.12

  • Mono 3.0.12 tiene los objetivos para las Bibliotecas de Clases Portables, pero no los ensamblados de referencia. Busque 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. Use las Condiciones de la Plataforma (mencionadas bajo Mono 3.0.11 o anterior ) o actualizar a 3.1.2.

Mono 3.0.11 o anterior

  • Errores de destino faltantes, si no es nuget, es probablemente porque está utilizando un destino de biblioteca de clases portátil u otro destino que no existe. Si su proyecto puede compilar para .net 4.0, puede modificar su .csproj or .fsproj, por lo que sobre .net se basa portátil y en mono que genera para .net 4.0. básicamente por cosas separadas en grupos de propiedades condicionales <PropertyGroup Condition="$(OS) == 'Windows_NT'"> <TargetFrameworkProfile>Profile46</TargetFrameworkProfile> </PropertyGroup> o Condition="$(OS) != 'Windows_NT' para mono. Su kilometraje puede variar. Véase el ejemplo de trabajo.

Mono 2.10.X

  • También Mono v2.10 le falta algo de Microsoft.Construir clases que Nuget necesita, puede copiar la v3.0.X dll, que es muy pequeño, a la .directorio nuget. (Lo usé aquí )

2. Ser capaz de ejecutar pruebas unitarias desde la línea de comandos.

.ci/nunit.sh es mi propio script de shell para las pruebas de nunit, comprobado en la raíz del repositorio. Así que puedo instalar el nunit-console version I want with nuget, and configure various include / excludes of categories too. Su kilometraje puede variar, pero esta técnica debe funcionar para xunit, etc. O haz lo tuyo 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. Configurar Travis para mono

Mono v3.8.0

Para probar el último mono, es más fácil usar hosts Mac (target usando language:objective-c Mono v3.1.2 y posteriores cambiaron la distribución en un Mac de un DMG a solo un PKG así que la instalación es bastante simple. Esta plantilla debe admitir Bibliotecas de clases portátiles,. NET 4.5.1 y 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

Para apuntar tanto Mono v2.10.X y v3. 0.X

Es fácil usar hosts Mac para configurar una matriz de compilación para múltiples versiones de Mono. Ver script abajo

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

Para linux

Y ahora deberías estar listo para usar travis en tu proyecto de c#.

 149
Author: jbtule,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-22 13:37:13

Ese es el punto clave: el proyecto debe funcionar en Mono. Esto funciona principalmente para proyectos de estilo biblioteca ( AWS SDK.NET es un buen ejemplo), aunque requiere más esfuerzos de desarrollo y disciplina. El entorno de construcción de Linux no funcionará si está desarrollando un proyecto para la plataforma Windows, como la aplicación WPF, el servicio en la nube Azure, la aplicación Windows Phone / Store o incluso ASP.NET Web API.

AppVeyor CI es un servicio de integración continua alojado para la plataforma Windows y es gratis para proyectos de código abierto. Es como Travis CI para Windows!

Puede configurar el proceso de compilación para VS.NET solución, proyecto personalizado de MSBuild, PSake o cualquier script de PowerShell de archivo por lotes. Además, AppVeyor tiene un marco de implementación y administración de artefactos incorporado.

 25
Author: Feodor Fitsner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-03 16:42:15

Como ya se mencionó, Travis CI tiene soporte beta para C#. Es fácil de usar. También nunit se puede integrar muy fácilmente. Aquí hay un pequeño ejemplo de a .travis.archivo yml que ejecuta pruebas nunit y marca la compilación como fallida si al menos una prueba unitaria falla:

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
 7
Author: Roemer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-19 12:32:01

Si quieres usar Travis CI con F#, en GitHub, con FAKE y Packet, entonces se recomienda el F # ProjectScaffold:

Http://fsprojects.github.io/ProjectScaffold

 1
Author: Andrew Olney,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-10 20:31:02