Travis-CI'yi C # veya F # ile nasıl kullanırım


92

Travis CI sürekli entegrasyon hizmeti resmi olarak birçok dili destekler ancak C # veya F # desteklemez.

.Net projelerimle kullanabilir miyim?

Yanıtlar:


16

Travis CI artık C # destekliyor . Bu sayfadan özgürce alıntı yapmak:

Genel Bakış

C #, F # ve Visual Basic projelerinin kurulumu şu şekilde görünür:

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

Senaryo

Travis, varsayılan olarak xbuild solution-name.sln'yi çalıştıracaktır. Xbuild, Microsoft'un MSBuild aracı için bir uygulama olarak tasarlanmış bir derleme aracıdır. Bunu geçersiz kılmak için script niteliğini şu şekilde ayarlayabilirsiniz:

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

NuGet

Varsayılan olarak, Travis, tüm NuGet paketlerini çözüm dosyanızdan geri yükleyen nuget restore solution-name.sln çalıştırır. Bunu geçersiz kılmak için install özniteliğini şu şekilde ayarlayabilirsiniz:

language: csharp
solution: solution-name.sln
install:
  - sudo dosomething
  - nuget restore solution-name.sln

cevap bu. Kısa ve öz.
vidstige

150

Danielnixon'un cevabına bakınBunu yapmanın resmi yolu için .

Bu mümkün.

1. Projenizin Mono üzerinde çalışması gerekiyor

Kendi mono makinenizde, terminali kullanarak cdçözüm dizininize girin ve komutu çalıştırın xbuild. Bu otomatik olarak çalışabilir veya çalışmayabilir, çünkü görsel stüdyoda kullandığınız ve monoda biraz ince ayar yapılması gereken özellikler vardır.

Dikkat edilecek şeyler:

  • Eksik dosya hataları, dosya adlarının büyük / küçük harflerinin sizinle eşleştiğinden emin olmak için kontrol edin. .csproj büyük / küçük harflerinin pencerelerin olmadığı büyük / küçük harfe duyarlı yollara sahip .
  • Nuget, koşmadan export EnableNuGetPackageRestore=trueöncexbuild , projeniz otomatik olarak geri .
  • Mono örneğinizin kök SSL sertifikaları olmayabilir, şunu kullanın: mozroots --import --sync bunları yüklemek için .
  • Ayrıca eksik dosya hataları görürseniz nuget.*,NuGet.* , .csproj referanslar nuget'in çeşitli sürümlerinde var olduğu bilinmektedir.
  • 2.5 nuget'in hedef dosyasında .target dosyasındaki boşluklara dayalı bir hata var, geçici çözüm burada
  • FSharp 3.0 desteği için mono 3.0.X veya sonraki bir sürüme ihtiyacınız vardır (ve kaynaktan derlemeniz gerekebilir, ancak varsayılan olarak Mac OS X'e yüklenmiştir)
  • VS2013 dan Fsharp projeleri için, düzenleyin gerekebilir .fsprojekleyerek olmayan pencereler makinelerde VS2012 yapılandırmayı tetiklemek için '$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT'bkz örneği .

Mono 3.1.12, 3.2.4 ve üstü

  • Mono 3.1.2, 3.2.4 ve sonraki sürümleri pcl desteğine sahiptir, ancak eksik PCL hataları da olabilir. Mono 3.0.12 altında aşağıda listelenen hataya dikkat edinYalnızca aşağıdaki çerçeve referanslarını içerdiğinden, :
    • v4.0, Profile136 .NET Framework 4, Silverlight 5, Windows Phone 8, Windows Mağazası uygulamaları (Windows 8)
    • v4.0, Profile14 .NET Framework 4, Silverlight 5
    • v4.0, Profile147 .NET Framework 4.0.3, Silverlight 5, Windows Phone 8, Windows Mağazası uygulamaları (Windows 8)
    • v4.0, Profile158 .NET Framework 4.5, Silverlight 5, Windows Phone 8, Windows Mağazası uygulamaları (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 Mağazası uygulamaları (Windows 8)
    • v4.0, Profile42 .NET Framework 4.0.3, Silverlight 5, Windows Mağazası uygulamaları (Windows 8)
    • v4.0, Profile47 .NET Framework 4.5, Silverlight 5, Windows Mağazası uygulamaları (Windows 8)
    • v4.0, Profile5 .NET Framework 4, Windows Mağazası uygulamaları (Windows 8)
    • v4.0, Profile6 .NET Framework 4.0.3, Windows Mağazası uygulamaları (Windows 8)
    • v4.5, Profile49 .NET Framework 4.5, Windows Phone 8
    • v4.5, Profile7 .NET Framework 4.5, Windows Mağazası uygulamaları (Windows 8)
    • v4.5, Profile78 .NET Framework 4.5, Windows Phone 8, Windows Mağazası uygulamaları (Windows 8)

Siyah Beyaz 3.0.12

  • Mono 3.0.12, Taşınabilir Sınıf Kitaplıkları için hedeflere sahiptir, ancak referans derlemelerine sahip değildir. İçin bak 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.altında belirtilen Kullanım Platformu Koşulları ( Mono 3.0.11 veya daha önceki yükseltin.

Mono 3.0.11 veya öncesi

  • Eksik Hedef hataları, nuget değilse, bunun nedeni büyük olasılıkla bir Taşınabilir sınıf kitaplığı hedefini veya var olmayan başka bir hedefi kullanıyor olmanızdır. Projeniz .net 4.0 için derleyebiliyorsa, .csproj veya .fsproj dosyanızı, .net üzerinde taşınabilir ve mono üzerinde .net 4.0 için oluşturacak şekilde değiştirebilirsiniz. temelde şeyleri koşullu mülkiyet gruplarına ayırarak <PropertyGroup Condition="$(OS) == 'Windows_NT'"> <TargetFrameworkProfile>Profile46</TargetFrameworkProfile> </PropertyGroup>veya Condition="$(OS) != 'Windows_NT'mono için. Kilometreniz değişebilir. Çalışma örneğine bakın .

Siyah Beyaz 2.10.X

  • Ayrıca Mono v2.10, Nuget'in ihtiyaç duyduğu Microsoft.Build sınıflarından bir kısmı eksik, çok küçük olan v3.0.X dll'yi .nuget dizinine kopyalayabilirsiniz. (Onu burada kullandım )

2. Komut satırından birim testleri çalıştırabilecektir.

.ci/nunit.shnunit testi için kendi kabuk betiğim, deponun kök dizinine kaydedildi. Bu yüzden nuget ile istediğim nunit-console sürümünü kurabilirim ve çeşitli kategorileri dahil etme / hariç tutmayı da yapılandırabilirim. Kilometreniz değişebilir, ancak bu teknik xunit vb. İçin çalışmalıdır. Veya xbuild veya sahte ile kendi işinizi yapın .

.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'i mono için yapılandırın

Mono v3.8.0

En son mono'yu test etmek için Mac ana bilgisayarlarını kullanmak en kolay yoldur ( language:objective-cMono v3.1.2 kullanarak hedefleyin ve daha sonra bir Mac'teki dağıtımı bir DMG'den yalnızca bir PKG'ye değiştirdi, böylece yükleme oldukça basittir. Bu şablon Portable Class Libraries, .NET'i desteklemelidir. 4.5.1 ve 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

Hem Mono v2.10.X hem de v3.0.X'i Hedeflemek İçin

Mono'nun birden çok sürümü için bir yapı matrisi oluşturmak üzere Mac ana bilgisayarlarını kullanmak çok kolay. Aşağıdaki komut dosyasına bakın

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 için

Ve şimdi c # projenizde travis kullanmaya gitmeniz iyi olur.


22
Muhtemelen bu sitede gördüğüm en iyi cevaplardan biri.
Michael Grassman

Merhaba, Travis CI tarafından bir fx4.5 projesi oluşturmaya çalışıyorum, ama değil sudo installer -pkg. Lütfen düzeltmeme yardım eder misiniz? Teşekkür ederim! bkz. travis-ci.org/Aimeast/TestForFirst/builds/13814315
Aimeast

language: objective-cOS X ana bilgisayarını kullanması için bu şablon için gereklidir.
jbtule

ServiceBus, Queue ve BrokeredMessage için CS0246 hataları alıyorum ("tür veya ad alanı adı bulunamadı"). Herhangi bir fikir?
saiyancoder

@Mati Windows Azure bu mu? Bunun mono uyumlu olduğunu sanmıyorum, ancak bahse girerim AppVeyor stackoverflow.com/a/19164665/637783
jbtule

25

Kilit nokta bu - proje Mono üzerinde çalışmalıdır. Bu, çoğunlukla kitaplık tarzı projeler için işe yarar ( AWS SDK .NET iyi bir örnektir), ancak daha fazla geliştirme çabası ve disiplin gerektirir. WPF uygulaması, Azure bulut hizmeti, Windows Phone / Store uygulaması veya hatta ASP.NET Web API gibi Windows platformu için bir proje geliştiriyorsanız, Linux oluşturma ortamı çalışmayacaktır.

AppVeyor CI , Windows platformu için barındırılan bir sürekli entegrasyon hizmetidir ve açık kaynaklı projeler için ücretsizdir. Windows için Travis CI gibi!

VS.NET çözümü, özel MSBuild projesi, PSake veya herhangi bir PowerShell betiği toplu iş dosyası için derleme işlemi kurabilirsiniz. Ayrıca, AppVeyor yerleşik yapı yönetimi ve dağıtım çerçevesine sahiptir.


2
@jbtule Sorunun doğrudan cevabı olmasa da, bu soruya gelen bazı ziyaretçiler (mesela ben) hem mono hem de MS .net platformlarında .net için sunucu oluşturmaya ilgi duyabilir.
steenhulthin

1
Ib bu gönderiye ek olarak, wercker kısa süre önce yerel .NET desteğini de başlattı: blog.wercker.com/2013/10/25/…
pjvds

AppVeyor CI, 'kaydol' bağlantısına bastığımda bana 503 hatası veriyor. Harika bir ilk izlenim değil ...
Dan Esparza

4
AppVeyor için +1, yakın zamanda bir .NET 4.5 uygulaması için iki yapı tanımı kurdum ve kurulumu çok basit ve çok fazla esnekliğe sahip. Destek de çok duyarlı, bir hata bildirdim ve düzeltildi ve 24 saatten daha kısa bir sürede üretime gönderildi.
J c

8

Daha önce de belirtildiği gibi, Travis CI , C # için beta desteğine sahiptir . Kullanması çok kolay. Ayrıca nunit çok kolay entegre edilebilir. En az bir birim testi başarısız olursa, nunit testlerini çalıştıran ve yapıyı başarısız olarak işaretleyen .travis.yml dosyasının küçük bir örneğini burada bulabilirsiniz:

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

Teşekkürler, bu yapılandırmayı kullanarak ilk kez travis'te çalıştırabildim (daha fazla ayrıntı içeren GH sorunu github.com/o2platform/FluentSharp/issues/… )
Dinis Cruz

Bu bana çok yardımcı oldu, teşekkürler! Eklediğim tek şey sudo: requiredsonunda oldu. Tıkır tıkır çalışıyor.
w0ns88

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.