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

스크립트

기본적으로 Travis는 xbuild solution-name.sln을 실행합니다. Xbuild는 Microsoft의 MSBuild 도구를 구현하도록 설계된 빌드 도구입니다. 이를 재정의하려면 다음과 같이 스크립트 속성을 설정할 수 있습니다.

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

NuGet

기본적으로 Travis는 솔루션 파일에서 모든 NuGet 패키지를 복원하는 nuget restore solution-name.sln을 실행합니다. 이를 재정의하려면 다음과 같이 설치 속성을 설정할 수 있습니다.

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

이것이 답입니다. 짧고 간결합니다.
vidstige

150

지금 공식적으로 수행하는 방법 은 danielnixon의 답변 을 참조하십시오 .

것이 가능하다.

1. 프로젝트가 Mono에서 작동해야합니다.

자신의 모노 머신에서 터미널을 사용 cd하여 솔루션 디렉토리로 이동하고 명령을 실행합니다 xbuild. 모노에서 약간의 조정이 필요한 Visual Studio에서 사용한 기능이 있기 때문에 자동으로 작동 할 수도 있고 그렇지 않을 수도 있습니다.

주의해야 할 사항 :

  • 누락 된 파일 오류, 파일 이름의 대소 문자가 .csprojLinux 와 일치하는지 확인하십시오 .
  • Nuget은 프로젝트가 자동 복원 export EnableNuGetPackageRestore=true되는 xbuild경우 실행 하기 전에 해야합니다 .
  • 모노 인스턴스에 루트 SSL 인증서가 없을 수 mozroots --import --sync있습니다.이를 사용 하여 설치하십시오.
  • 또한 누락 된 파일 오류가 표시되는 경우 .csproj nuget.*NuGet.*참조 대신 다양한 버전의 nuget에 존재하는 것으로 알고 있습니다.
  • 2.5 nuget의 대상 파일의 버그가 .target 파일의 공백에 따라가, 해결 여기
  • FSharp 3.0 지원을 위해서는 모노 3.0.X 이상이 필요합니다 (소스에서 빌드해야 할 수도 있지만 기본적으로 Mac OS X에 설치됨).
  • VS2013의 FSharp 프로젝트의 경우 예제 참조 .fsproj 추가하여 Windows가 아닌 시스템에서 VS2012 구성을 트리거하도록를 편집해야 할 수 있습니다 .'$(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)

모노 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.사용 플랫폼 조건 (아래에서 언급 한 모노 3.0.11 이전 버전 ) 또는 3.1.2로 업그레이드.

Mono 3.0.11 이하

  • 누락 된 대상 오류, 너겟이 아니면 존재하지 않는 휴대용 클래스 라이브러리 대상 또는 기타 대상을 사용하고 있기 때문일 수 있습니다. 프로젝트가 .net 4.0 용으로 컴파일 할 수있는 경우 .csproj 또는 .fsproj를 수정하여 .net에서 이식 가능하고 모노에서 .net 4.0 용으로 빌드하도록 수정할 수 있습니다. 기본적으로 조건부 속성 그룹 <PropertyGroup Condition="$(OS) == 'Windows_NT'"> <TargetFrameworkProfile>Profile46</TargetFrameworkProfile> </PropertyGroup>또는 Condition="$(OS) != 'Windows_NT'모노 로 분리 합니다. 귀하의 마일리지가 다를 수 있습니다. 작업 예를 참조하십시오 .

모노 2.10.X

  • 또한 Mono v2.10에는 Nuget에 필요한 Microsoft.Build 클래스 중 일부가 누락되어 있으므로 매우 작은 v3.0.X dll을 .nuget 디렉토리에 복사 할 수 있습니다. ( 여기서 사용했습니다 )

2. 명령 줄에서 단위 테스트를 실행할 수 있습니다.

.ci/nunit.shnunit 테스트를위한 내 자신의 셸 스크립트이며 저장소의 루트에 체크인되었습니다. 그래서 원하는 nunit-console 버전을 너겟으로 설치하고 카테고리의 다양한 포함 / 제외도 구성 할 수 있습니다. 마일리지는 다를 수 있지만이 기술은 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. 모노 용 Travis 구성

모노 v3.8.0

최신 모노를 테스트하려면 Mac 호스트를 사용하는 것이 가장 쉽습니다 ( language:objective-cMono 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를 모두 타겟팅하려면

여러 버전의 Mono에 대한 빌드 매트릭스를 설정하기 위해 Mac 호스트를 사용하기 쉽습니다. 아래 스크립트 참조

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의 경우

이제 C # 프로젝트에서 travis를 사용하는 것이 좋습니다.


22
아마도이 사이트에서 본 최고의 답변 중 하나 일 것입니다.
Michael Grassman

안녕하세요, Travis CI에서 fx4.5 프로젝트를 빌드하려고하지만 sudo installer -pkg. 문제를 해결하도록 도와 주시겠습니까? 감사합니다! 참조, travis-ci.org/Aimeast/TestForFirst/builds/13814315
Aimeast

language: objective-c해당 템플릿에 필요하므로 OS X 호스트를 사용합니다.
jbtule

ServiceBus, Queue 및 BrokeredMessage에 대해 CS0246 오류 ( "유형 또는 네임 스페이스 이름을 찾을 수 없음")가 나타납니다. 어떤 아이디어?
saiyancoder

@Mati는 Windows Azure입니까? 나는 그것이 모노 호환이라고 생각하지 않지만 AppVeyor stackoverflow.com/a/19164665/637783에서
jbtule

25

이것이 핵심 포인트입니다. 프로젝트는 Mono에서 작동해야합니다. 이는 대부분 라이브러리 스타일 프로젝트 ( AWS SDK .NET 이 좋은 예)에서 작동하지만 더 많은 개발 노력과 규율이 필요합니다. WPF 애플리케이션, Azure 클라우드 서비스, Windows Phone / Store 앱 또는 ASP.NET Web API와 같은 Windows 플랫폼 용 프로젝트를 개발하는 경우 Linux 구축 환경이 작동하지 않습니다.

AppVeyor CI 는 Windows 플랫폼 용으로 호스팅되는 지속적 통합 서비스이며 오픈 소스 프로젝트에는 무료입니다. Windows 용 Travis CI와 같습니다!

VS.NET 솔루션, 사용자 지정 MSBuild 프로젝트, PSake 또는 배치 파일의 PowerShell 스크립트에 대한 빌드 프로세스를 설정할 수 있습니다. 게다가 AppVeyor에는 내장 된 아티팩트 관리 및 배포 프레임 워크가 있습니다.


2
@jbtule이 질문에 대한 직접적인 대답은 아니지만이 질문에 대한 일부 방문자 (예 : 저)는 모노 및 MS .net 플랫폼 모두에서 .net 용 빌드 서버에 관심이있을 수 있습니다.
steenhulthin

1
이 게시물에 추가로 wercker는 최근에 기본 .NET 지원도 시작했습니다. blog.wercker.com/2013/10/25/…
pjvds

AppVeyor CI에서 '가입'링크를 누르면 503 오류가 발생합니다. 좋은 첫인상이 아닙니다 ...
Dan Esparza

4
AppVeyor의 경우 +1, 최근에 .NET 4.5 응용 프로그램에 대한 두 개의 빌드 정의를 설정했으며 설정이 매우 간단하고 유연성이 많습니다. 지원도 매우 신속하게 이루어졌고 버그를보고했으며 수정되어 24 시간 이내에 프로덕션에 적용되었습니다.
J c

8

이미 언급했듯이 Travis CIC #에 대한 베타 지원을 제공합니다 . 나는 사용하기 직진합니다. 또한 nunit은 매우 쉽게 통합 될 수 있습니다. 다음은 nunit 테스트를 실행하고 하나 이상의 단위 테스트가 실패하면 빌드를 실패로 표시하는 .travis.yml 파일의 작은 예입니다.

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/… )
Dinis Cruz

이것은 정말 감사합니다! 내가 추가 한 유일한 것은 sudo: required끝에 있습니다. 매력처럼 작동합니다.
w0ns88

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.