92

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

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

4

5 回答 5

151

有关现在执行此操作的官方方法,请参见danielnixon 的答案

有可能的。

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

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

需要注意的事项:

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

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 应用商店应用程序 (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。

Mono 3.0.11 或更早版本

  • Missing Target 错误,如果不是 nuget,可能是因为您使用的是 Portable 类库目标或其他不存在的目标。如果您的项目可以为 .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 脚本,已检查到 repo 的根目录中。所以我可以使用 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

为了测试最新的单声道,最容易使用 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 了。

于 2013-05-25T16:48:39.120 回答
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 具有内置的工件管理和部署框架。

于 2013-10-03T16:42:15.747 回答
17

特拉维斯 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 包。要覆盖它,您可以像这样设置安装属性:

language: csharp
solution: solution-name.sln
install:
  - sudo dosomething
  - nuget restore solution-name.sln
于 2014-12-11T00:01:46.687 回答
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
于 2014-12-19T12:32:01.737 回答
1

如果你想将 Travis CI 与 F#、GitHub 上的 FAKE 和 Packet 一起使用,那么建议使用 F# ProjectScaffold:

http://fsprojects.github.io/ProjectScaffold

于 2016-03-10T20:31:02.877 回答