如何将Travis-CI与C#或F#结合使用


91

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

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

Answers:


16

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是一个构建工具,旨在作为Microsoft MSBuild工具的实现。要覆盖此属性,可以这样设置脚本属性:

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

NuGet

默认情况下,Travis将运行nuget restore solution-name.sln,该文件将从您的解决方案文件中还原所有NuGet软件包。要覆盖此属性,可以这样设置install属性:

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

这就是答案。简短而简洁。
vidstige

150

请参阅danielnixon的答案以获取立即执行此操作的官方方法。

有可能的。

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

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

要注意的事情:

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

Mono 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 Store应用(Windows 8)
    • v4.0,Profile14 .NET Framework 4,Silverlight 5
    • v4.0,Profile147 .NET Framework 4.0.3,Silverlight 5,Windows Phone 8,Windows Store应用(Windows 8)
    • v4.0,Profile158 .NET Framework 4.5,Silverlight 5,Windows Phone 8,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,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 Store应用(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。

Mono 3.0.11或更早版本

  • 缺少目标错误,如果不是nuget,则可能是因为您使用的是可移植类库目标或其他不存在的目标。如果您的项目可以针对.net 4.0进行编译,则可以修改.csproj或.fsproj,以便在.net上可移植,而在mono上可以.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脚本,已签入回购协议的根目录。因此,我可以使用nuget安装我想要的nunit-console版本,并配置各种类别的包含/排除。您的里程可能会有所不同,但是此技术应适用于xunit等。或者使用xbuild或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.将Travis配置为单声道

单声道v3.8.0

要测试最新的Mono,最简单的方法是使用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

同时定位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

对于Linux

现在,您应该可以在c#项目上使用travis。


22
这可能是我在该网站上见过的最好的答案之一。
迈克尔·格拉斯曼

嗨,我尝试用Travis CI构建一个fx4.5项目,但不是sudo installer -pkg。能帮我解决一下吗?谢谢!参见travis-ci.org/Aimeast/TestForFirst/builds/13814315
Aimeast 2013年

language: objective-c该模板是必需的,以便它使用OS X主机。
jbtule

我收到ServiceBus,Queue和BrokeredMessage的CS0246错误(“找不到类型或名称空间名称”)。有任何想法吗?
saiyancoder 2014年

@Mati是Windows Azure吗?我不认为这是单声道兼容的,但我敢打赌,它将在AppVeyor stackoverflow.com/a/19164665/637783
jbtule 2014年

25

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

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

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


2
@jbtule虽然它不能直接回答问题,但确实可以提供价值,因为此问题的某些访问者(例如,我)可能对mono和MS .net平台上的.net构建服务器都感兴趣。
steenhulthin 2013年

1
IB除了这个职位,wercker最近推出的原生.NET的支持,以及:blog.wercker.com/2013/10/25/...
pjvds

当我按“注册”链接时,AppVeyor CI给我503错误。这不是一个很好的第一印象……
Dan Esparza 2014年

4
对于AppVeyor +1,我最近为.NET 4.5应用程序设置了两个构建定义,它的设置非常简单,并且具有很大的灵活性。该支持也非常敏感,我报告了一个错误,该错误已得到修复,并在不到24小时内投入生产。
J c

8

如前所述,Travis CI 对C#具有beta 支持。我不会直接使用。nunit也可以很容易地集成。这是一个.travis.yml文件的小示例,该文件运行nunit测试并在至少一个单元测试失败的情况下将构建标记为失败:

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

谢谢,使用此配置,我能够在travis上第一次运行它(GH问题有更多详细信息,github.com / o2platform / FluentSharp / issues /…
Dinis Cruz

非常感谢我!我添加的唯一内容是sudo: required最后。奇迹般有效。
w0ns88 '17

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.