Làm cách nào để sử dụng Travis-CI với C # hoặc F #


91

Dịch vụ tích hợp liên tục Travis CI chính thức hỗ trợ nhiều ngôn ngữ , nhưng không phải C # hoặc F #.

Tôi có thể sử dụng nó với các dự án .net của mình không?

Câu trả lời:


16

Travis CI hiện hỗ trợ C # . Trích dẫn tự do từ trang đó:

Tổng quat

Thiết lập cho các dự án C #, F # và Visual Basic trông giống như sau:

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

Kịch bản

Theo mặc định, Travis sẽ chạy xbuild solution-name.sln. Xbuild là một công cụ xây dựng được thiết kế để triển khai cho công cụ MSBuild của Microsoft. Để ghi đè điều này, bạn có thể đặt thuộc tính script như sau:

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

NuGet

Theo mặc định, Travis sẽ chạy nuget restore solution-name.sln, khôi phục tất cả các gói NuGet từ tệp giải pháp của bạn. Để ghi đè điều này, bạn có thể đặt thuộc tính cài đặt như sau:

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

đây là câu trả lời. Ngắn gọn và súc tích.
vidstige

150

Xem câu trả lời của danielnixon để biết cách chính thức để thực hiện việc này ngay bây giờ.

Điều đó là có thể.

1. Dự án của bạn cần hoạt động trên Mono

Trên máy mono của riêng bạn, sử dụng thiết bị đầu cuối, cdvào thư mục giải pháp của bạn và chạy lệnh xbuild. Điều này có thể tự động hoạt động hoặc có thể không, vì có những tính năng bạn đã sử dụng trong studio trực quan cần một số điều chỉnh ở chế độ đơn âm.

Những điều cần chú ý:

  • Thiếu lỗi tệp, hãy kiểm tra để đảm bảo trường hợp tên tệp khớp với .csprojlinux của bạn có các đường dẫn phân biệt chữ hoa chữ thường trong đó cửa sổ không.
  • Nuget yêu cầu bạn export EnableNuGetPackageRestore=truetrước khi chạy xbuildnếu dự án của bạn tự động khôi phục.
  • Phiên bản đơn của bạn có thể không có chứng chỉ SSL gốc, hãy sử dụng mozroots --import --syncđể cài đặt chúng.
  • Ngoài ra, nếu bạn thấy lỗi tệp bị thiếu, nuget.*thay vì các NuGet.*tham chiếu trong .csproj của bạn đã được biết là tồn tại trong các phiên bản khác nhau của nuget.
  • Có một lỗi trong tệp đích của 2.5 nuget dựa trên khoảng trắng trong tệp .target, giải pháp khắc phục tại đây
  • Để hỗ trợ FSharp 3.0, bạn cần mono 3.0.X trở lên (và có thể cần tạo từ nguồn, nhưng được cài đặt theo mặc định trên Mac OS X)
  • Đối với các dự án FSharp từ VS2013, bạn có thể cần phải chỉnh sửa .fsprojđể kích hoạt cấu hình VS2012 trên các máy không chạy windows bằng cách thêm '$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT'xem ví dụ .

Mono 3.1.12, 3.2.4 và mới hơn

  • Mono 3.1.2, 3.2.4 trở lên có hỗ trợ pcl, nhưng cũng có thể có lỗi PCL bị thiếu. Hãy chú ý đến lỗi được liệt kê bên dưới trong Mono 3.0.12 vì nó chỉ bao gồm các tham chiếu khung sau:
    • v4.0, Profile136 .NET Framework 4, Silverlight 5, Windows Phone 8, ứng dụng 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, ứng dụng Windows Store (Windows 8)
    • v4.0, Profile158 .NET Framework 4.5, Silverlight 5, Windows Phone 8, ứng dụng 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, ứng dụng Windows Store (Windows 8)
    • v4.0, Profile42 .NET Framework 4.0.3, Silverlight 5, ứng dụng Windows Store (Windows 8)
    • v4.0, Profile47 .NET Framework 4.5, Silverlight 5, ứng dụng Windows Store (Windows 8)
    • v4.0, Profile5 .NET Framework 4, ứng dụng Windows Store (Windows 8)
    • v4.0, Profile6 .NET Framework 4.0.3, ứng dụng Windows Store (Windows 8)
    • v4.5, Hồ sơ 49 .NET Framework 4.5, Windows Phone 8
    • v4.5, Profile7 .NET Framework 4.5, ứng dụng Windows Store (Windows 8)
    • v4.5, Profile78 .NET Framework 4.5, Windows Phone 8, ứng dụng Windows Store (Windows 8)

Mono 3.0.12

  • Mono 3.0.12 có các mục tiêu cho Thư viện Lớp Di động nhưng không phải là các cụm tham chiếu. Tìm 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.Điều kiện nền tảng sử dụng (được đề cập trong Mono 3.0.11 hoặc phiên bản cũ hơn ) hoặc nâng cấp lên 3.1.2.

Mono 3.0.11 trở xuống

  • Thiếu lỗi Target, nếu nó không phải là nuget, có thể là do bạn đang sử dụng target thư viện lớp Portable hoặc target khác không tồn tại. Nếu dự án của bạn có thể biên dịch cho .net 4.0, bạn có thể sửa đổi .csproj hoặc .fsproj của mình, để trên .net, nó xây dựng khả năng di động và trên mono, nó xây dựng cho .net 4.0. về cơ bản bằng cách tách các thứ thành các nhóm đặc tính có điều kiện <PropertyGroup Condition="$(OS) == 'Windows_NT'"> <TargetFrameworkProfile>Profile46</TargetFrameworkProfile> </PropertyGroup>hoặc Condition="$(OS) != 'Windows_NT'cho đơn tính. Số dặm của bạn có thể thay đổi. Xem ví dụ làm việc .

Đơn sắc 2.10.X

  • Ngoài ra Mono v2.10 còn thiếu một số lớp Microsoft.Build mà Nuget cần, bạn có thể sao chép dll v3.0.X, rất nhỏ, vào thư mục .nuget. (Tôi đã sử dụng nó ở đây )

2. Có thể chạy các bài kiểm tra đơn vị từ dòng lệnh.

.ci/nunit.shlà tập lệnh shell của riêng tôi để kiểm tra nunit, được kiểm tra trong thư mục gốc của repo. Vì vậy, tôi có thể cài đặt phiên bản nunit-console mà tôi muốn với nuget và định cấu hình các danh mục bao gồm / loại trừ khác nhau. Số dặm của bạn có thể thay đổi, nhưng kỹ thuật này sẽ hoạt động đối với xunit, v.v. Hoặc làm việc của riêng bạn với xbuild hoặc giả .

.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. Định cấu hình Travis cho mono

Mono v3.8.0

Để thử nghiệm mono mới nhất, dễ nhất là sử dụng máy chủ Mac (nhắm mục tiêu bằng cách sử dụng language:objective-cMono v3.1.2 và sau đó đã thay đổi phân phối trên máy Mac từ DMG thành chỉ PKG nên việc cài đặt khá đơn giản. Mẫu này sẽ hỗ trợ Thư viện lớp di động, .NET 4.5.1 và 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

Để nhắm mục tiêu cả Mono v2.10.X và v3.0.X

Tôi dễ dàng sử dụng máy chủ Mac để thiết lập ma trận xây dựng cho nhiều phiên bản Mono. Xem kịch bản bên dưới

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

Đối với linux

Và bây giờ bạn nên sử dụng travis trong dự án c # của mình.


22
Đó có lẽ là một trong những câu trả lời hay nhất mà tôi từng thấy trên trang web này.
Michael Grassman

Xin chào, tôi đang cố gắng tạo một dự án fx4.5 của Travis CI, nhưng không được sudo installer -pkg. Xin vui lòng giúp tôi sửa chữa nó? Cảm ơn bạn! xem, travis-ci.org/Aimeast/TestForFirst/builds/13814315
Aimeast

language: objective-clà cần thiết cho mẫu đó, để nó sử dụng máy chủ OS X.
jbtule

Tôi đang gặp lỗi CS0246 ("không thể tìm thấy tên loại hoặc không gian tên") cho ServiceBus, Queue và BrokeredMessage. Bất kỳ ý tưởng?
saiyancoder

@Mati có phải là Windows Azure không? Tôi không nghĩ rằng của mono tương thích, nhưng tôi đặt cược nó sẽ làm việc một cách dễ dàng trên AppVeyor stackoverflow.com/a/19164665/637783
jbtule

25

Đó là điểm mấu chốt - dự án phải hoạt động trên Mono. Điều này hầu hết hoạt động cho các dự án kiểu thư viện ( AWS SDK .NET là một ví dụ điển hình) mặc dù đòi hỏi nhiều nỗ lực phát triển và kỷ luật hơn. Môi trường xây dựng Linux sẽ không hoạt động nếu bạn đang phát triển một dự án cho nền tảng Windows như ứng dụng WPF, dịch vụ đám mây Azure, ứng dụng Windows Phone / Store hoặc thậm chí là ASP.NET Web API.

AppVeyor CI là một dịch vụ tích hợp liên tục được lưu trữ trên nền tảng Windows và hoàn toàn miễn phí cho các dự án nguồn mở. Nó giống như Travis CI dành cho Windows!

Bạn có thể thiết lập quy trình xây dựng cho giải pháp VS.NET, dự án MSBuild tùy chỉnh, PSake hoặc bất kỳ tập lệnh PowerShell nào của tệp loạt. Bên cạnh đó, AppVeyor có sẵn khung quản lý và triển khai tạo tác.


2
@jbtule Mặc dù đây không phải là câu trả lời trực tiếp cho câu hỏi mà nó cung cấp giá trị, vì một số khách truy cập câu hỏi này (ví dụ: tôi) có thể quan tâm đến cả việc xây dựng máy chủ cho .net cả trên nền tảng mono và MS .net.
steenhulthin

1
Ib Ngoài bài này, wercker gần đây đưa ra hỗ trợ .NET bản địa cũng như: blog.wercker.com/2013/10/25/...
pjvds

AppVeyor CI đang báo cho tôi lỗi 503 khi tôi nhấn vào liên kết 'đăng ký'. Không phải là một ấn tượng đầu tiên ...
Dan Esparza

4
+1 cho AppVeyor, gần đây tôi đã thiết lập hai định nghĩa xây dựng cho ứng dụng .NET 4.5 và nó rất dễ thiết lập và có nhiều tính linh hoạt. Việc hỗ trợ cũng rất nhạy, tôi đã báo cáo một lỗi và nó đã được sửa và chuyển sang sản xuất trong vòng chưa đầy 24 giờ.
J c

8

Như đã đề cập, Travis CIhỗ trợ beta cho C # . Tôi sẽ thẳng thắn sử dụng. Ngoài ra nunit có thể được tích hợp rất dễ dàng. Dưới đây là một ví dụ nhỏ về tệp .travis.yml chạy thử nghiệm nunit và đánh dấu bản dựng là không thành công nếu ít nhất một thử nghiệm đơn vị không thành công:

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

Cảm ơn, bằng cách sử dụng cấu hình này, tôi đã có thể chạy nó trên travis lần đầu tiên (vấn đề GH với nhiều chi tiết hơn github.com/o2platform/FluentSharp/issues/… )
Dinis Cruz

Điều này đã giúp tôi rất nhiều cảm ơn! Điều duy nhất tôi đã thêm là sudo: requiredở cuối. Hoạt động như một sự quyến rũ.
w0ns88

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.