Как использовать Travis-CI с C # или F #

86

Служба непрерывной интеграции Travis CI официально поддерживает многие языки, но не С# или F #.

Могу ли я использовать его в моих проектах .net?

Теги:
f#
mono
travis-ci

5 ответов

13
Лучший ответ

Travis CI теперь поддерживает С#. Цитируя либерально с этой страницы:

Обзор

Настройка для проектов С#, F # и Visual Basic выглядит следующим образом:

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

Script

По умолчанию Travis запустит xbuild solution-name.sln. Xbuild - это инструмент построения, предназначенный для реализации Microsoft MSBuild. Чтобы переопределить это, вы можете установить атрибут script следующим образом:

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
  • 0
    это ответ. Коротко и кратко.
140

См. ответ danielnixon для официального способа сделать это сейчас.

Возможно.

1. Ваш проект должен работать над Mono

На вашем собственном моно-машине, используя терминал, cd в каталог решений и запустите команду xbuild. Это может автоматически работать, а может и нет, поскольку есть функции, которые вы использовали в визуальной студии, которые нуждаются в некоторой настройке в моно.

Что нужно искать:

  • Ошибки отсутствующих файлов, убедитесь, что имена файлов совпадают с вашим файлом .csproj. В нем есть пути, чувствительные к регистру, где нет окон.
  • Nuget требует export EnableNuGetPackageRestore=true перед запуском xbuild, если ваш проект автоматически восстановится.
  • В вашем экземпляре mono могут отсутствовать корневые SSL-сертификаты, используйте mozroots --import --sync для их установки.
  • Также, если вы видите недостающие ошибки файла, nuget.* вместо nuget.* ссылки в вашем .csproj, как известно, существуют в разных версиях nuget.
  • В файле 2.5 nuget есть ошибка, основанная на пробеле в файле .target, обходное решение здесь
  • Для поддержки FSharp 3.0 вам потребуется mono 3.0.X или новее (и, возможно, потребуется создать исходный код, но по умолчанию установлен на Mac OS X)
  • Для проектов FSharp из VS2013 вам может потребоваться отредактировать .fsproj, чтобы вызвать конфигурацию VS2012 на компьютерах без окон, добавив '$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT' в example.

Моно 3.1.12, 3.2.4 и более поздние

  • Mono 3.1.2, 3.2.4 и более поздние версии поддерживают pcl, но также могут иметь недостающие ошибки PCL. Обратите внимание на ошибку, указанную ниже в разделе Моно 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 Store (Windows 8)
    • v4.0, Profile42.NET Framework 4.0.3, Silverlight 5, приложения для Windows Store (Windows 8)
    • v4.0, Profile47.NET Framework 4.5, Silverlight 5, приложения для Windows Store (Windows 8)
    • v4.0, Profile5.NET Framework 4, приложения для Windows Store (Windows 8)
    • v4.0, Profile6.NET Framework 4.0.3, приложения для Windows Store (Windows 8)
    • v4.5, Profile49.NET Framework 4.5, Windows Phone 8
    • v4.5, Profile7.NET Framework 4.5, приложения для Windows Store (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. Условия использования платформы (см. Моно 3.0.11 или более ранние версии) или обновите до 3.1.2.

Моно 3.0.11 или ранее

  • Недостающие ошибки цели, если это не nuget, возможно, из-за того, что вы используете переносную целевую библиотеку класса или другую цель, которая не существует. Если ваш проект может компилироваться для .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 отсутствуют некоторые из классов Microsoft.Build, которым нужен Nuget, вы можете скопировать dll v3.0.X, что очень мало, в каталог .nuget. (Я использовал его здесь)

2. Возможность запуска модульных тестов из командной строки.

.ci/nunit.sh - это моя собственная оболочка script для тестирования nunit, проверенная в корне репо. Поэтому я могу установить версию nunit-console, которую я хочу с помощью nuget, и настроить различные включения/исключения категорий. Ваш пробег может отличаться, но этот метод должен работать для 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, поэтому установка довольно проста. Этот шаблон должен поддерживать Portable Class Libraries,.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. См. Ниже script

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

И теперь вы должны хорошо использовать Travis в своем проекте С#.

  • 22
    Это, наверное, один из лучших ответов, которые я когда-либо видел на этом сайте.
  • 0
    Привет, я пытаюсь построить проект fx4.5 с помощью Travis CI, но не sudo installer -pkg . Не могли бы вы помочь мне исправить это? Спасибо! смотрите, travis-ci.org/Aimeast/TestForFirst/builds/13814315
Показать ещё 11 комментариев
25

Что ключевой момент - проект должен работать над Mono. Это в основном работает для проектов в стиле библиотеки (AWS SDK.NET - это хороший пример), хотя требует больших усилий и дисциплины развития. Окружающая среда для Linux не будет работать, если вы разрабатываете проект для платформы Windows, такой как приложение WPF, облачный сервис Azure, приложение Windows Phone/Store или даже веб-API ASP.NET.

AppVeyor CI - это постоянная служба интеграции для платформы Windows, и она бесплатна для проектов с открытым исходным кодом. Это похоже на Travis CI для Windows!

Вы можете настроить процесс сборки для решения VS.NET, настраиваемого проекта MSBuild, PSake или любого PowerShell script командного файла. Кроме того, AppVeyor имеет встроенную инфраструктуру управления артефактами и развертывания.

  • 2
    @jbtule Хотя это не прямой ответ на вопрос, он действительно имеет значение, поскольку некоторые посетители этого вопроса (например, я) могут быть заинтересованы как в сборочном сервере для .net, так и на моно, и на MS .net платформах.
  • 1
    Помимо этого поста, wercker недавно также запустил собственную поддержку .NET: blog.wercker.com/2013/10/25/…
Показать ещё 2 комментария
7

Как уже упоминалось, Travis CI поддерживает бета для С#. Я прямо использую. Также nunit можно легко интегрировать. Вот небольшой пример файла .travis.yml, который запускает nunit-тесты и отмечает, что сборка не удалась, если не удалось выполнить хотя бы один unit test:

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
  • 0
    Спасибо, используя этот конфиг, я смог запустить его на travis в первый раз (проблема GH с более подробной информацией github.com/o2platform/FluentSharp/issues/… )
  • 0
    Это помогло мне большое спасибо! Единственное, что я добавил, было sudo: required в конце. Работает как шарм.
1

Если вы хотите использовать Travis CI с F #, на GitHub, с FAKE и Packet, рекомендуется F # ProjectScaffold:

http://fsprojects.github.io/ProjectScaffold

Ещё вопросы

Сообщество Overcoder
Наверх
Меню