Как использовать Travis-CI с C# или F#
Служба непрерывной интеграции Travis CI официально поддерживает множество языков, но не C# или F#.
Могу ли я использовать его с моими проектами.net?
5 ответов
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 - это инструмент для сборки, разработанный для реализации инструмента MSBuild от Microsoft. Чтобы переопределить это, вы можете установить атрибут 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
Смотрите ответ Даниэльксона для официального способа сделать это сейчас.
Это возможно.
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)
Mono 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'
для моно. Ваш пробег может отличаться. Смотрите рабочий пример.
Mono 2.10.X
- Также в Mono v2.10 отсутствуют некоторые классы Microsoft.Build, в которых нуждается Nuget. Вы можете скопировать очень маленькую библиотеку 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. Настройте Трэвис для моно
Mono 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. Смотри скрипт ниже
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#.
Это ключевой момент - проект должен работать на Mono. Это в основном работает для проектов в стиле библиотеки (хороший пример - AWS SDK .NET), хотя требует больше усилий по разработке и дисциплины. Среда сборки Linux не будет работать, если вы разрабатываете проект для платформы Windows, такой как приложение WPF, облачная служба Azure, приложение Windows Phone/Store или даже ASP.NET Web API.
AppVeyor CI - это служба непрерывной интеграции для платформы Windows, которая бесплатна для проектов с открытым исходным кодом. Это как Travis CI для Windows!
Вы можете настроить процесс сборки для решения VS.NET, пользовательского проекта MSBuild, PSake или любого сценария PowerShell для пакетного файла. Кроме того, AppVeyor имеет встроенную инфраструктуру управления и развертывания артефактов.
Как уже упоминалось, 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 CI с F#, на GitHub, с FAKE и Packet, то рекомендуется использовать F# ProjectScaffold: