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

92

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

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

jbtule
источник

Ответы:

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

По умолчанию Трэвис запускает nuget restore solution-name.sln, который восстанавливает все пакеты NuGet из файла решения. Чтобы переопределить это, вы можете установить атрибут установки следующим образом:

language: csharp
solution: solution-name.sln
install:
  - sudo dosomething
  - nuget restore solution-name.sln
Дэниелниксон
источник
это ответ. Коротко и емко.
vidstige
150

См . Ответ Даниелниксона, чтобы узнать официальный способ сделать это сейчас.

Это возможно.

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

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

На что следует обратить внимание:

  • Ошибки отсутствия файлов, убедитесь, что регистр имен файлов соответствует .csprojрегистру в вашем linux, а в Windows - нет.
  • Nuget требует от вас этого export EnableNuGetPackageRestore=trueперед запуском, xbuildесли ваш проект автоматически восстанавливается.
  • Ваш моно-экземпляр может не иметь корневых сертификатов 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 на машинах без Windows, добавив '$(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, вероятно, потому, что вы используете цель переносимой библиотеки классов или другую цель, которая не существует. Если ваш проект может компилироваться для .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это мой собственный сценарий оболочки для тестирования 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-cMono 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. Смотрите сценарий ниже

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 в своем проекте C #.

jbtule
источник
22
Вероятно, это один из лучших ответов, которые я когда-либо видел на этом сайте.
Майкл Грассман
Привет, я пытаюсь создать проект fx4.5 от Travis CI, но нет sudo installer -pkg. Не могли бы помочь мне это исправить? Спасибо! см. travis-ci.org/Aimeast/TestForFirst/builds/13814315
Aimeast
language: objective-cнеобходим для этого шаблона, чтобы он использовал хост OS X.
jbtule
Я получаю ошибки CS0246 («не удалось найти тип или имя пространства имен») для ServiceBus, Queue и BrokeredMessage. Любые идеи?
saiyancoder
@ Мати, это Windows Azure? Я не думаю, что он совместим с моно, но держу пари, что он будет легко работать с AppVeyor stackoverflow.com/a/19164665/637783
jbtule 08
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 для пакетного файла. Кроме того, AppVeyor имеет встроенную среду управления артефактами и развертывания.

Федор Фицнер
источник
2
@jbtule Хотя это не прямой ответ на вопрос, он действительно представляет ценность, поскольку некоторые посетители этого вопроса (например, я) могут быть заинтересованы в обоих серверах сборки для .net как на моно, так и на MS .net платформах.
steenhulthin
1
В дополнение к этому сообщению, wercker недавно также запустил встроенную поддержку .NET: blog.wercker.com/2013/10/25/…
pjvds
AppVeyor CI выдает ошибку 503, когда я нажимаю ссылку «зарегистрироваться». Не
Дэн Эспарса
4
+1 для AppVeyor, я недавно установил два определения сборки для приложения .NET 4.5, и он очень прост в настройке и обладает большой гибкостью. Служба поддержки также очень отзывчива, я сообщил об ошибке, она была исправлена ​​и запущена в производство менее чем за 24 часа.
J с
8

Как уже упоминалось, Travis CI имеет бета- поддержку 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в конце. Работает как шарм.
w0ns88 02