如何在C#或F#中使用Travis-CI

jbt*_*ule 90 c# mono f# travis-ci

Travis CI持续集成服务正式支持多种语言,但不支持C#或F#.

我可以在我的.net项目中使用它吗?

jbt*_*ule 150

请参阅danielnixon的回答,了解现在正式执行此操作的方法.

有可能的.

1.您的项目需要在Mono上工作

在您自己的单声道计算机上,使用终端,cd进入解决方案目录并运行命令xbuild.这可能会自动工作,也可能不会,因为您在visual studio中使用的功能需要在单声道中进行一些调整.

需要注意的事项:

  • 缺少文件错误,检查以确保文件名的大小写匹配您的.csprojLinux具有区分大小写的路径,而Windows不会.
  • 如果您的项目自动恢复,Nuget会export EnableNuGetPackageRestore=true在运行之前要求您xbuild.
  • 您的mono实例可能没有root SSL证书,用于mozroots --import --sync安装它们.
  • 此外,如果您看到丢失的文件错误,nuget.*而不是NuGet.*.csproj中的引用已经知道存在于各种版本的nuget中.
  • 2.5 nuget的目标文件中有一个基于.target文件中的空格的错误,此处有解决方法
  • 对于FSharp 3.0支持,您需要单声道3.0.X或更高版本(可能需要从源代码构建,但默认情况下在Mac OS X上安装)
  • 对于VS2013中的FSharp项目,您可能需要编辑自己.fsproj以通过添加'$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT'参见示例来触发非Windows计算机上的VS2012配置.

单声道3.1.12,3.2.4及更高版本

  • Mono 3.1.2,3.2.4及更高版本具有pcl支持,但也可能缺少PCL错误.请注意Mono 3.0.12下面列出的错误,因为它只包含以下框架引用:
    • v4.0,Profile136 .NET Framework 4,Silverlight 5,Windows Phone 8,Windows应用商店应用程序(Windows 8)
    • v4.0,Profile14 .NET Framework 4,Silverlight 5
    • v4.0,Profile147 .NET Framework 4.0.3,Silverlight 5,Windows Phone 8,Windows应用商店应用程序(Windows 8)
    • v4.0,Profile158 .NET Framework 4.5,Silverlight 5,Windows Phone 8,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,Windows应用商店应用程序(Windows 8)
    • v4.0,Profile42 .NET Framework 4.0.3,Silverlight 5,Windows应用商店应用(Windows 8)
    • v4.0,Profile47 .NET Framework 4.5,Silverlight 5,Windows应用商店应用程序(Windows 8)
    • v4.0,Profile5 .NET Framework 4,Windows应用商店应用(Windows 8)
    • v4.0,Profile6 .NET Framework 4.0.3,Windows应用商店应用(Windows 8)
    • v4.5,Profile49 .NET Framework 4.5,Windows Phone 8
    • v4.5,Profile7 .NET Framework 4.5,Windows应用商店应用(Windows 8)
    • v4.5,Profile78 .NET Framework 4.5,Windows Phone 8,Windows应用商店应用程序(Windows 8)

单声道3.0.12

  • Mono 3.0.12具有可移植类库的目标,但没有参考程序集.查找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.使用平台条件(在Mono 3.0.11或更早版本中提到)或升级到3.1.2.

单声道3.0.11或更早版本

  • 缺少目标错误,如果它不是nuget,可能是因为您正在使用Portable类库目标或其他不存在的目标.如果您的项目可以编译为.net 4.0,则可以修改.csproj或.fsproj,以便在.net上构建可移植的,并在单声道上构建.net 4.0.基本上由单独的东西组成条件属性组<PropertyGroup Condition="$(OS) == 'Windows_NT'"> <TargetFrameworkProfile>Profile46</TargetFrameworkProfile> </PropertyGroup>Condition="$(OS) != 'Windows_NT'单声道.你的旅费可能会改变.见工作示例.

单声道2.10.X

  • 另外Mono v2.10缺少一些Nuget需要的Microsoft.Build类,你可以将非常小的v3.0.X dll复制到.nuget目录中.(我在这里用过)

2.能够从命令行运行单元测试.

.ci/nunit.sh是我自己的用于nunit测试的shell脚本,检查了repo的根目录.所以我可以用nuget安装我想要的nunit-console版本,并配置各种类别的include /排除.你的里程可能会有所不同,但这种技术应该适用于xunit等.或者用xbuild或假冒自己的东西.

.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 $?
Run Code Online (Sandbox Code Playgroud)

3.为单声道配置Travis

单声道v3.8.0

为了测试最新的单声道,它最容易使用Mac主机(目标是使用language:objective-cMono v3.1.2,后来将Mac上的发行版从DMG更改为PKG,因此安装非常简单.此模板应支持可移植类库,.NET 4.5.1和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
Run Code Online (Sandbox Code Playgroud)

要同时使用Mono v2.10.X和v3.0.X

我很容易使用Mac主机为多个版本的Mono设置构建矩阵.见下面的脚本

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
Run Code Online (Sandbox Code Playgroud)

对于Linux

现在你应该好好在你的c#项目中使用travis.

  • 这可能是我在这个网站上见过的最好的答案之一. (22认同)

小智 25

这是关键点 - 该项目必须适用于Mono.这主要适用于库式项目(AWS SDK .NET是一个很好的例子),但需要更多的开发工作和纪律.如果您正在为Windows平台开发项目,如WPF应用程序,Azure云服务,Windows Phone/Store应用程序甚至ASP.NET Web API,Linux构建环境将无法运行.

AppVeyor CI是Windows平台的托管持续集成服务,对于开源项目是免费的.这就像Travis CI for Windows!

您可以为VS.NET解决方案,自定义MSBuild项目,PSake或批处理文件的任何PowerShell脚本设置构建过程.此外,AppVeyor还具有内置工件管理和部署框架.

  • 为AppVeyor +1,我最近为.NET 4.5应用程序设置了两个构建定义,它非常简单,并且具有很大的灵活性.支持也是非常敏感的,我报告了一个错误,它被修复并在不到24小时内推向生产. (4认同)
  • @jbtule虽然它没有直接回答它确实提供了价值的问题,但是因为这个问题的一些访问者(例如我)可能对单声道和MS .net平台上的.net构建服务器感兴趣. (2认同)

dan*_*xon 16

Travis CI现在支持C#.从该页面大量引用:

概观

C#,F#和Visual Basic项目的设置如下所示:

language: csharp
solution: solution-name.sln
mono:
  - latest
  - 3.12.0
  - 3.10.0
Run Code Online (Sandbox Code Playgroud)

脚本

默认情况下,Travis将运行xbuild solution-name.sln.Xbuild是一个构建工具,旨在成为Microsoft的MSBuild工具的实现.要覆盖它,您可以像这样设置脚本属性:

language: csharp
solution: solution-name.sln
script: ./build.sh
Run Code Online (Sandbox Code Playgroud)

的NuGet

默认情况下,Travis将运行nuget restore solution-name.sln,它将从解决方案文件中恢复所有NuGet包.要覆盖它,您可以像这样设置install属性:

language: csharp
solution: solution-name.sln
install:
  - sudo dosomething
  - nuget restore solution-name.sln
Run Code Online (Sandbox Code Playgroud)


Roe*_*mer 8

如前所述,Travis CI 对C#提供测试版支持.我很直接使用.也可以很容易地集成nunit.这是一个运行nunit测试的.travis.yml文件的小例子,如果至少有一个单元测试失败,则将构建标记为失败:

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
Run Code Online (Sandbox Code Playgroud)