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

91

El servicio de integración continua de Travis CI admite oficialmente muchos idiomas , pero no C # ni F #.

¿Puedo usarlo con mis proyectos .net?

jbtule
fuente

Respuestas:

16

Travis CI ahora es compatible con C # . Citando generosamente de esa página:

Visión general

La configuración para proyectos de C #, F # y Visual Basic tiene este aspecto:

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

Guión

De forma predeterminada, 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 de secuencia de comandos de esta manera:

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

NuGet

De forma predeterminada, 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 de instalación de esta manera:

language: csharp
solution: solution-name.sln
install:
  - sudo dosomething
  - nuget restore solution-name.sln
danielnixon
fuente
esta es la respuesta. Breve y sucinto.
vidstige
150

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

Es posible.

1. Tu proyecto debe funcionar en Mono

En su propia máquina mono, usando la terminal, cden el directorio de su solución y ejecutando el comando xbuild. Esto puede funcionar automáticamente, o puede que no, ya que hay funciones que usó en Visual Studio que necesitan algunos ajustes en mono.

Cosas a tener en cuenta:

  • Errores de archivos faltantes, compruebe que las mayúsculas y minúsculas de los nombres de archivo coincidan con su .csproj linux y tenga rutas que distingan entre mayúsculas y minúsculas donde Windows no.
  • Nuget requiere que lo hagas export EnableNuGetPackageRestore=trueantes de correrxbuild si tu proyecto se restaura automáticamente.
  • Es posible que su instancia mono no tenga certificados SSL raíz, utilice mozroots --import --sync para instalarlos.
  • Además, si ve errores de archivos faltantes, en nuget.*lugar deNuGet.* referencias en su .csproj, se sabe que existen en varias versiones de nuget.
  • Hay un error en el archivo de destino de 2.5 nuget basado en espacios en blanco en el archivo .target, solución aquí
  • Para la compatibilidad con FSharp 3.0, necesita mono 3.0.X o posterior (y es posible que deba compilar desde la fuente, pero se instala de forma predeterminada en Mac OS X)
  • Para los proyectos de FSharp de VS2013, es posible que deba editar su .fsprojpara activar la configuración de VS2012 en máquinas que no sean de Windows agregando '$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT'see example .

Mono 3.1.12, 3.2.4 y posteriores

  • Mono 3.1.2, 3.2.4 y posteriores tienen soporte pcl, pero también pueden tener los errores PCL faltantes. Busque el error que se enumera 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 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 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 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 destinos para las bibliotecas de clases portátiles, pero no los ensamblados de referencia. Busque las 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.condiciones de la plataforma de uso (mencionadas en Mono 3.0.11 o anterior ) o actualice a 3.1.2.

Mono 3.0.11 o anterior

  • Faltan errores de destino, si no es nuget, probablemente se deba a que está utilizando un destino de biblioteca de clases portátil u otro destino que no existe. Si su proyecto puede compilarse para .net 4.0, puede modificar su .csproj o .fsproj, de modo que en .net se compile como portable y en mono se compile para .net 4.0. básicamente separando las cosas en grupos de propiedades condicionales <PropertyGroup Condition="$(OS) == 'Windows_NT'"> <TargetFrameworkProfile>Profile46</TargetFrameworkProfile> </PropertyGroup>o Condition="$(OS) != 'Windows_NT'para mono. Su experiencia puede ser diferente. Ver ejemplo de trabajo .

Mono 2.10.X

  • Además, a Mono v2.10 le faltan algunas de las clases de Microsoft.Build que Nuget necesita, puede copiar el dll v3.0.X, que es muy pequeño, al directorio .nuget. (Lo usé aquí )

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

.ci/nunit.shes mi propio script de shell para pruebas nunit, registrado en la raíz del repositorio. Entonces puedo instalar la versión de nunit-console que quiero con nuget y configurar también varias inclusiones / exclusiones de categorías. Su kilometraje puede variar, pero esta técnica debería funcionar para xunit, etc. O haga lo suyo 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. Configure Travis para mono

Mono v3.8.0

Para probar el último mono, es más fácil usar hosts de Mac (apunte usando language:objective-cMono v3.1.2 y luego cambió la distribución en una Mac de un DMG a solo un PKG, por lo 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 a Mono v2.10.X y v3.0.X

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

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ía estar listo para usar travis en su proyecto de c #.

jbtule
fuente
22
Esa es probablemente una de las mejores respuestas que he visto en este sitio.
Michael Grassman
Hola, estoy tratando de construir un proyecto fx4.5 por Travis CI, pero no sudo installer -pkg. ¿Podría ayudarme a solucionarlo? ¡Gracias! ver, travis-ci.org/Aimeast/TestForFirst/builds/13814315
Aimeast
language: objective-ces necesario para esa plantilla, de modo que utilice el host OS X.
jbtule
Recibo errores CS0246 ("no se pudo encontrar el tipo o el nombre del espacio de nombres") para ServiceBus, Queue y BrokeredMessage. ¿Algunas ideas?
saiyancoder
@Mati, ¿eso es Windows Azure? No creo que sea compatible con mono, pero apuesto a que funcionará fácilmente en AppVeyor stackoverflow.com/a/19164665/637783
jbtule
25

Ese es el punto clave: el proyecto debe funcionar en Mono. Esto funciona principalmente para proyectos de estilo de 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 la API web ASP.NET.

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

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

Feodor Fitsner
fuente
2
@jbtule Aunque no es una respuesta directa a la pregunta, sí proporciona valor, ya que algunos visitantes de esta pregunta (yo, por ejemplo) pueden estar interesados ​​en construir servidores para .net tanto en plataformas mono como MS .net.
steenhulthin
1
Además de esta publicación, wercker también lanzó recientemente soporte nativo para .NET: blog.wercker.com/2013/10/25/…
pjvds
AppVeyor CI me está dando un error 503 cuando presiono el enlace 'registrarse'. No fue una gran primera impresión ...
Dan Esparza
4
+1 para AppVeyor, recientemente configuré dos definiciones de compilación para una aplicación .NET 4.5 y es muy sencillo de configurar y tiene mucha flexibilidad. El soporte también es muy receptivo, informé un error y se solucionó y se puso en producción en menos de 24 horas.
J c
8

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

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
fuente
Gracias, usando esta configuración pude ejecutarla en travis por primera vez (problema de GH con más detalles github.com/o2platform/FluentSharp/issues/… )
Dinis Cruz
¡Esto me ayudó muchísimo gracias! Lo único que agregué fue sudo: requiredal final. Funciona de maravilla.
w0ns88