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

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

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

Travis CI现在支持C# 。 从该页面引用自由:

概观

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

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

脚本

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

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

的NuGet

默认情况下,Travis将运行nuget restore solution-name.sln,它将恢复解决scheme文件中的所有NuGet包。 要覆盖这个,你可以像这样设置安装属性:

 language: csharp solution: solution-name.sln install: - sudo dosomething - nuget restore solution-name.sln 

看到丹尼尔森的答案是现在正式的做法。

有可能的。

你的项目需要在Mono上工作

在您自己的单声道机器上,使用terminal, cd到您的解决scheme目录并运行命令xbuild 。 这可能会自动工作,也可能不会,因为你在visual studio中使用的function需要在单声道中进行一些调整。

需要注意的事项:

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

单声道3.1.12,3.2.4和更高版本

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

单声道3.0.12

  • 单声道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. 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或更早版本

  • 缺less目标错误,如果它不是nuget,可能是因为您正在使用可移植类库目标或其他不存在的目标。 如果您的项目可以编译.net 4.0,您可以修改.csproj或.fsproj,以便在.net上构build便携式,并为.net 4.0构build单声道。 基本上通过单独的东西进入条件属性组<PropertyGroup Condition="$(OS) == 'Windows_NT'"> <TargetFrameworkProfile>Profile46</TargetFrameworkProfile> </PropertyGroup>Condition="$(OS) != 'Windows_NT'单声道您的里程可能会有所不同。

单声道2.10.X

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

2.能够从命令行运行unit testing。

.ci/nunit.sh是我自己的用于nunittesting的shell脚本,被检入回购的根目录。 所以我可以用nuget安装我想要的nunit-console版本,并且configuration各种类别的include / excludes。 你的里程可能会有所不同,但是这种技术应该适用于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 $? 

3.configurationTravis for mono

单声道v3.8.0

对于testing最新的单声道,使用Mac主机是最容易的(目标是使用以下language:objective-c Mono v3.1.2及更高版本将Mac上的发行版从DMG更改为PKG,因此安装非常简单,该模板应支持Portable类库,.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 

定位到Mono v2.10.X和v3.0.X

我很容易使用Mac主机为多个版本的Mono设置构buildmatrix。 见下面的脚本

 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 

对于Linux

  • 请参阅下面的答案以获取新的testing版定义

现在你应该很好的去使用你的C#项目的Travis。

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

AppVeyor CI是一个面向Windows平台的托pipe持续集成服务,免费用于开源项目。 这就像Windows的特拉维斯CI!

您可以设置VS.NET解决scheme,自定义MSBuild项目,PSake或batch file的任何PowerShell脚本的构build过程。 此外,AppVeyor还内置了工件pipe理和部署框架。

如前所述, Travis CI 对C#有betatesting支持 。 我不敢直接使用。 而且nunit可以非常容易地被整合。 下面是一个.travis.yml文件的小例子,如果至less有一个unit testing失败,它会运行nunittesting并将构build标记为失败:

 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 

如果你想用F#的Travis CI,在GitHub上用FAKE和Packet,那么build议使用F#ProjectScaffold:

http://fsprojects.github.io/ProjectScaffold