Bagaimana cara menggunakan Travis-CI dengan C # atau F #

92

Layanan integrasi berkelanjutan Travis CI secara resmi mendukung banyak bahasa , tetapi tidak mendukung C # atau F #.

Bisakah saya menggunakannya dengan proyek .net saya?

jbtule.dll
sumber

Jawaban:

16

Travis CI sekarang mendukung C # . Mengutip dengan bebas dari halaman itu:

Gambaran

Pengaturan untuk C #, F #, dan proyek Visual Basic terlihat seperti ini:

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

Naskah

Secara default, Travis akan menjalankan xbuild solution-name.sln. Xbuild adalah alat pembangunan yang dirancang untuk menjadi implementasi alat MSBuild Microsoft. Untuk menimpanya, Anda dapat mengatur atribut script seperti ini:

language: csharp
solution: solution-name.sln
script: ./build.sh

NuGet

Secara default, Travis akan menjalankan nuget restore solution-name.sln, yang mengembalikan semua paket NuGet dari file solusi Anda. Untuk menimpanya, Anda dapat mengatur atribut install seperti ini:

language: csharp
solution: solution-name.sln
install:
  - sudo dosomething
  - nuget restore solution-name.sln
danielnixon
sumber
inilah jawabannya. Singkat dan ringkas.
vidstige
150

Lihat jawaban danielnixon untuk cara resmi melakukan ini sekarang.

Itu mungkin.

1. Proyek Anda perlu bekerja di Mono

Di mesin mono Anda sendiri, menggunakan terminal, cdke direktori solusi Anda dan menjalankan perintah xbuild. Ini dapat bekerja secara otomatis, atau mungkin tidak, karena ada fitur yang Anda gunakan di studio visual yang memerlukan beberapa penyesuaian dalam mono.

Hal-hal yang harus diperhatikan:

  • Kesalahan file hilang, periksa untuk memastikan kapitalisasi nama file sesuai dengan .csprojlinux Anda memiliki jalur peka huruf besar kecil di mana windows tidak.
  • Nuget meminta Anda export EnableNuGetPackageRestore=truesebelum menjalankan xbuildjika proyek Anda otomatis pulih.
  • Instance mono Anda mungkin tidak memiliki sertifikat SSL root, gunakan mozroots --import --syncuntuk menginstalnya.
  • Juga jika Anda melihat kesalahan file yang hilang, nuget.*bukannya NuGet.*referensi di .csproj Anda telah diketahui ada di berbagai versi nuget.
  • Ada bug di file target 2.5 nuget berdasarkan spasi di file .target, solusinya di sini
  • Untuk dukungan FSharp 3.0 Anda memerlukan mono 3.0.X atau lebih baru (dan mungkin perlu membangun dari sumber, tetapi diinstal secara default di Mac OS X)
  • Untuk proyek FSharp dari VS2013, Anda mungkin perlu mengedit Anda .fsprojuntuk memicu konfigurasi VS2012 pada mesin non windows dengan menambahkan '$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT'lihat contoh .

Mono 3.1.12, 3.2.4 dan yang lebih baru

  • Mono 3.1.2, 3.2.4 dan yang lebih baru memiliki dukungan pcl, tetapi juga dapat memiliki kesalahan PCL yang hilang. Perhatikan kesalahan yang tercantum di bawah ini di bawah Mono 3.0.12 karena hanya mencakup referensi kerangka kerja berikut:
    • v4.0, Profile136 .NET Framework 4, Silverlight 5, Windows Phone 8, aplikasi 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, aplikasi Windows Store (Windows 8)
    • v4.0, Profile158 .NET Framework 4.5, Silverlight 5, Windows Phone 8, aplikasi 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, aplikasi Windows Store (Windows 8)
    • v4.0, Profile42 .NET Framework 4.0.3, Silverlight 5, aplikasi Windows Store (Windows 8)
    • v4.0, Profile47 .NET Framework 4.5, Silverlight 5, aplikasi Windows Store (Windows 8)
    • v4.0, Profile5 .NET Framework 4, aplikasi Windows Store (Windows 8)
    • v4.0, Profile6 .NET Framework 4.0.3, aplikasi Windows Store (Windows 8)
    • v4.5, Profile49 .NET Framework 4.5, Windows Phone 8
    • v4.5, Profile7 .NET Framework 4.5, aplikasi Windows Store (Windows 8)
    • v4.5, Profile78 .NET Framework 4.5, Windows Phone 8, aplikasi Windows Store (Windows 8)

Mono 3.0.12

  • Mono 3.0.12 memiliki target untuk Perpustakaan Kelas Portabel tetapi bukan rakitan referensi. Cari 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.Ketentuan Penggunaan Platform (disebutkan di bawah Mono 3.0.11 atau sebelumnya ) atau tingkatkan ke 3.1.2.

Mono 3.0.11 atau lebih lama

  • Kesalahan Target Hilang, jika bukan nuget, itu mungkin karena Anda menggunakan target perpustakaan kelas portabel atau target lain yang tidak ada. Jika proyek Anda dapat dikompilasi untuk .net 4.0, Anda dapat memodifikasi .csproj atau .fsproj Anda, sehingga pada .net itu dibangun portabel dan pada mono itu dibangun untuk .net 4.0. pada dasarnya dengan memisahkan hal-hal ke dalam kelompok properti bersyarat <PropertyGroup Condition="$(OS) == 'Windows_NT'"> <TargetFrameworkProfile>Profile46</TargetFrameworkProfile> </PropertyGroup>atau Condition="$(OS) != 'Windows_NT'untuk mono. Jarak tempuh Anda mungkin berbeda. Lihat contoh kerja .

Mono 2.10.X

  • Juga Mono v2.10 kehilangan beberapa kelas Microsoft.Build yang dibutuhkan Nuget, Anda dapat menyalin dll v3.0.X, yang sangat kecil, ke direktori .nuget. (Saya menggunakannya di sini )

2. Mampu menjalankan tes unit dari baris perintah.

.ci/nunit.shadalah skrip shell saya sendiri untuk pengujian nunit, diperiksa ke root repo. Jadi saya dapat menginstal versi konsol nunit yang saya inginkan dengan nuget, dan mengkonfigurasi berbagai kategori termasuk / tidak termasuk juga. Jarak tempuh Anda mungkin berbeda, tetapi teknik ini harus bekerja untuk xunit dll. Atau lakukan hal Anda sendiri dengan xbuild atau palsu .

.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. Konfigurasi Travis untuk mono

Mono v3.8.0

Untuk menguji mono terbaru, paling mudah menggunakan host Mac (target dengan menggunakan language:objective-cMono v3.1.2 dan yang lebih baru mengubah distribusi di Mac dari DMG menjadi PKG saja sehingga pemasangannya cukup sederhana. Template ini harus mendukung Perpustakaan Kelas Portabel, .NET 4.5.1, dan 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

Untuk Menargetkan Mono v2.10.X dan v3.0.X

Saya mudah menggunakan host Mac untuk menyiapkan matriks build untuk beberapa versi Mono. Lihat skrip di bawah ini

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

Untuk linux

Dan sekarang Anda sebaiknya menggunakan travis pada proyek c # Anda.

jbtule.dll
sumber
22
Itu mungkin salah satu jawaban terbaik yang pernah saya lihat di situs ini.
Michael Grassman
Hai, Saya mencoba membangun proyek fx4.5 oleh Travis CI, tetapi tidak sudo installer -pkg. Bisakah tolong bantu saya untuk memperbaikinya? Terima kasih! lihat, travis-ci.org/Aimeast/TestForFirst/builds/13814315
Aimeast
language: objective-cdiperlukan untuk template tersebut, sehingga template tersebut menggunakan host OS X.
jbtule
Saya mendapatkan kesalahan CS0246 ("jenis atau nama namespace tidak dapat ditemukan") untuk ServiceBus, Queue dan BrokeredMessage. Ada ide?
saiyancoder
@Mati apakah itu Windows Azure? Saya tidak berpikir itu kompatibel dengan mono, tapi saya yakin ini akan bekerja dengan mudah di AppVeyor stackoverflow.com/a/19164665/637783
jbtule
25

Itulah poin kuncinya - proyek harus bekerja di Mono. Ini sebagian besar berfungsi untuk proyek bergaya perpustakaan ( AWS SDK .NET adalah contoh yang baik) meskipun membutuhkan lebih banyak upaya pengembangan dan disiplin. Lingkungan pembuatan Linux tidak akan berfungsi jika Anda mengembangkan proyek untuk platform Windows seperti aplikasi WPF, layanan cloud Azure, aplikasi Windows Phone / Store, atau bahkan ASP.NET Web API.

AppVeyor CI adalah layanan integrasi berkelanjutan yang dihosting untuk platform Windows dan gratis untuk proyek sumber terbuka. Ini seperti Travis CI untuk Windows!

Anda dapat mengatur proses pembuatan untuk solusi VS.NET, proyek MSBuild kustom, PSake atau skrip PowerShell dari file batch. Selain itu, AppVeyor memiliki kerangka kerja manajemen dan penerapan artefak bawaan.

Feodor Fitsner
sumber
2
@jbtule Meskipun ini bukan jawaban langsung untuk pertanyaan itu, hal itu memberikan nilai, karena beberapa pengunjung pertanyaan ini (saya misalnya) mungkin tertarik pada kedua membangun server untuk .net baik pada platform mono dan MS .net.
steenhulthin
1
Ib selain posting ini, wercker baru-baru ini meluncurkan dukungan NET asli juga: blog.wercker.com/2013/10/25/…
pjvds
AppVeyor CI memberi saya kesalahan 503 ketika saya menekan tautan 'daftar'. Bukan kesan pertama yang bagus ...
Dan Esparza
4
1 untuk AppVeyor, saya baru-baru ini menyiapkan dua definisi build untuk aplikasi .NET 4.5 dan sangat mudah untuk disiapkan dan memiliki banyak fleksibilitas. Dukungannya juga sangat responsif, saya melaporkan bug dan telah diperbaiki dan didorong ke produksi dalam waktu kurang dari 24 jam.
J c
8

Seperti yang telah disebutkan, Travis CI memiliki dukungan beta untuk C # . Saya langsung menggunakannya. Nunit juga dapat diintegrasikan dengan sangat mudah. Berikut adalah contoh kecil dari file .travis.yml yang menjalankan tes nunit dan menandai build sebagai gagal jika setidaknya satu unit test gagal:

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
Roemer
sumber
Terima kasih, dengan menggunakan konfigurasi ini saya dapat menjalankannya di travis untuk pertama kalinya (Masalah GH dengan detail selengkapnya github.com/o2platform/FluentSharp/issues/… )
Dinis Cruz
Ini sangat membantu saya, terima kasih! Satu-satunya hal yang saya tambahkan adalah sudo: requireddi bagian akhir. Bekerja seperti pesona.
w0ns88