Як мені використовувати Travis-CI з C # або F #


91

Служба безперервної інтеграції Travis CI офіційно підтримує багато мов , але не C # або F #.

Чи можу я використовувати його зі своїми .net-проектами?

Відповіді:


16

Travis CI тепер підтримує C # . Цитата з цієї сторінки:

Огляд

Налаштування для проектів C #, F # та Visual Basic виглядає так:

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

Сценарій

За замовчуванням Тревіс буде запускати xbuild solution-name.sln. Xbuild - це інструмент побудови, призначений для реалізації інструменту MSBuild від Microsoft. Щоб замінити це, ви можете встановити атрибут script наступним чином:

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

Дивіться відповідь Деніелксона щодо офіційного способу зробити це зараз.

Можливо.

1. Ваш проект повинен працювати над Mono

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

На що слід звернути увагу:

  • Помилки відсутніх файлів. Переконайтесь, що регістр імен файлів відповідає вашому .csprojLinux, має регістри, де Windows не відповідає.
  • Nuget вимагає від вас export EnableNuGetPackageRestore=trueперед запуском, xbuildякщо ваш проект автоматично відновлюється.
  • Ваш монопримірник може не мати кореневих сертифікатів SSL, використовуйте mozroots --import --syncдля їх встановлення.
  • Також якщо ви бачите помилки відсутніх файлів, nuget.*замість NuGet.*посилань у .csproj відомо, що вони існують у різних версіях nuget.
  • У цільовому файлі 2.5 nuget є помилка на основі пробілів у .target-файлі, тут можна обійти
  • Для підтримки FSharp 3.0 вам потрібен моно 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 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 (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 або раніше

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

2. Вмійте запускати модульні тести з командного рядка.

.ci/nunit.shце мій власний сценарій оболонки для тестування nunit, зареєстрований в корені репо. Тож я можу встановити потрібну мені версію nunit-console за допомогою nuget, а також налаштувати різні категорії включення / виключення категорій. Ваш пробіг може відрізнятися, але ця техніка повинна працювати для xunit тощо. Або виконайте власні дії з xbuild або підробкою .

.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. Налаштуйте Тревіса на моно

Mono v3.8.0

Для тестування останньої language:objective-cмонопростої програми найпростіше використовувати хости Mac (орієнтуватися за допомогою 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

А тепер вам слід добре поїхати використовувати travis у своєму проекті c #.


22
Це, мабуть, одна з найкращих відповідей, яку я коли-небудь бачив на цьому сайті.
Michael Grassman

Привіт, я намагаюся створити проект fx4.5 Тревіса Сі, але ні sudo installer -pkg. Не могли б ви допомогти мені це виправити? Дякую! див., travis-ci.org/Aimeast/TestForFirst/builds/13814315
Aimeast

language: objective-cнеобхідний для цього шаблону, щоб він використовував хост OS X.
jbtule

Я отримую помилки CS0246 ("тип або ім'я простору імен не знайдено") для ServiceBus, Queue та BrokeredMessage. Будь-які ідеї?
saiyancoder

@Mati це Windows Azure? Я не думаю , що це моно сумісні, але я впевнений , що буде легко працювати на AppVeyor stackoverflow.com/a/19164665/637783
jbtule

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 c

8

Як уже зазначалося, Тревіс 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.