【问题标题】:How do I use Travis-CI with C# or F#如何将 Travis-CI 与 C# 或 F# 一起使用
【发布时间】:2013-05-21 01:07:25
【问题描述】:

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

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

【问题讨论】:

    标签: c# f# mono travis-ci


    【解决方案1】:

    请参阅danielnixon's answer 了解现在执行此操作的官方方法。

    有可能。

    1。您的项目需要在 Mono 上运行

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

    注意事项:

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

    单声道 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' 用于单声道。你的旅费可能会改变。见工作example

    单声道 2.10.X

    • 此外,Mono v2.10 缺少一些 Nuget 需要的 Microsoft.Build 类,您可以将非常小的 v3.0.X dll 复制到 .nuget 目录。 (我用过here

    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-c Mono 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。

    【讨论】:

    • 这可能是我在这个网站上见过的最好的答案之一。
    • 嗨,我正在尝试通过 Travis CI 构建一个 fx4.5 项目,但不是 sudo installer -pkg。请帮我解决它吗?谢谢!看,travis-ci.org/Aimeast/TestForFirst/builds/13814315
    • language: objective-c 是该模板所必需的,因此它使用 OS X 主机。
    • ServiceBus、Queue 和 BrokeredMessage 出现 CS0246 错误(“找不到类型或命名空间名称”)。有什么想法吗?
    • @Mati 是 Windows Azure 吗?我不认为这是单声道兼容的,但我敢打赌它可以在 AppVeyor stackoverflow.com/a/19164665/637783 上轻松运行
    【解决方案2】:

    这是关键点 - 项目必须在 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 具有内置的工件管理和部署框架。

    【讨论】:

    • @jbtule 虽然它不是对问题的直接答案,但它确实提供了价值,因为这个问题的一些访问者(例如我)可能对在单声道和 MS 上为 .net 构建服务器感兴趣.net 平台。
    • Ib 除了这篇文章,wercker 最近还推出了原生 .NET 支持:blog.wercker.com/2013/10/25/…
    • 当我按下“注册”链接时,AppVeyor CI 给我一个 503 错误。第一印象不是很好......
    • +1 对于 AppVeyor,我最近为 .NET 4.5 应用程序设置了两个构建定义,它的设置非常简单,并且具有很大的灵活性。支持也非常敏感,我报告了一个错误,它在不到 24 小时内得到修复并投入生产。
    【解决方案3】:

    Travis CI 现在supports 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
    

    【讨论】:

    • 这就是答案。简明扼要。
    【解决方案4】:

    如前所述,Travis CI 有测试版support for C#。我可以直接使用。 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/…
    • 这对我帮助很大,谢谢!我唯一添加的是最后的sudo: required。像魅力一样工作。
    【解决方案5】:

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

    http://fsprojects.github.io/ProjectScaffold

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 2016-12-12
      • 1970-01-01
      • 2014-04-02
      相关资源
      最近更新 更多