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 restore solution-name.slnを実行し、ソリューションファイルからすべてのNuGetパッケージを復元します。これを上書きするには、次のようにインストール属性を設定します。

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

これが答えです。短くて簡潔。
vidstige 2016年

150

ダニエルニクソンの答えを見るこれを行うための公式の方法については、を。

可能です。

1.プロジェクトはMonoで動作する必要があります

自分のモノマシンで、ターミナルを使用しcdて、ソリューションディレクトリに移動し、コマンドを実行しますxbuild。これは自動的に機能する場合と機能しない場合があります。これは、Visual Studioで使用した機能の中で、モノラルの調整が必要な場合があるためです。

注意点:

  • ファイルが見つからないというエラーが発生した場合は、ファイル名の.csproj大文字と小文字がLinuxと一致していることを確認してください。
  • Nugetでは、プロジェクトが自動的に復元される場合、export EnableNuGetPackageRestore=true実行する前に必要がありますxbuild
  • モノインスタンスにルートSSL証明書がない可能性がありmozroots --import --syncます。インストールに使用してください。
  • また、ファイルが見つからないというエラーが表示された場合nuget.*は、NuGet.*は、.csproj参照の、さまざまなバージョンのnugetに存在することがわかっています。
  • .targetファイルの空白に基づく2.5 nugetのターゲットファイルにバグがあります。回避策はこちら
  • FSharp 3.0サポートには、mono 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 Storeアプリ(Windows 8)
    • v4.0、Profile14 .NET Framework 4、Silverlight 5
    • v4.0、Profile147 .NET Framework 4.0.3、Silverlight 5、Windows Phone 8、Windows Storeアプリ(Windows 8)
    • v4.0、Profile158 .NET Framework 4.5、Silverlight 5、Windows Phone 8、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、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またはそれ以前

  • 不足しているターゲットエラー、それがnugetでない場合は、おそらくポータブルクラスライブラリターゲットまたは存在しない他のターゲットを使用していることが原因です。プロジェクトが.net 4.0用にコンパイルできる場合は、.csprojまたは.fsprojを変更して、.netではポータブルにビルドし、monoでは.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.shリポジトリのルートにチェックインされた、nunitテスト用の独自のシェルスクリプトです。そのため、nugetで必要な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をモノ用に構成する

Mono v3.8.0

最新のモノをテストするには、Macホストを使用するのが最も簡単です(language:objective-cMono v3.1.2以降を使用してターゲットをMacでディストリビューションをDMGからPKGに変更したため、インストールは非常に簡単です。このテンプレートは、ポータブルクラスライブラリ、.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の場合

  • 新しいベータの定義については、以下の回答を参照してください。

これで、c#プロジェクトでtravisを使用できるようになります。


22
これはおそらく、このサイトでこれまでに見た中で最高の答えの1つです。
Michael Grassman 2013年

こんにちは、Travis CIでfx4.5プロジェクトをビルドしようとしていsudo installer -pkgますが、ではありません。それを修正するのを手伝ってくれませんか?ありがとうございました!travis-ci.org/Aimeast/TestForFirst/builds/13814315
Aimeast

language: objective-cそのテンプレートにはOS Xホストを使用するために必要です。
jbtule 2013

ServiceBus、Queue、BrokeredMessageでCS0246エラー(「タイプまたは名前空間名が見つかりませんでした」)が発生します。何か案は?
saiyancoder 2014年

@マティはその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 2013年

1
この投稿へのIb加え、最近だけでなくネイティブの.NETサポートを開始しましたwercker:blog.wercker.com/2013/10/25/...は
pjvds

「サインアップ」リンクを押すと、AppVeyor CIから503エラーが出ます。素晴らしい第一印象ではない...
Dan Esparza

4
AppVeyorの+1として、最近、.NET 4.5アプリケーションの2つのビルド定義をセットアップしました。セットアップは非常に簡単で、多くの柔軟性があります。サポートも非常に迅速に対応できるようになりました。バグを報告しましたが、修正され、24時間以内に製品化されました。
J c

8

すでに述べたように、Travis CIC#のベータサポートを備えています。使用するのは簡単ではありません。また、nunitは非常に簡単に統合できます。次に、nunitテストを実行し、少なくとも1つの単体テストが失敗した場合にビルドを失敗とマークする.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

おかげで、この設定を使用して初めてトラビスで実行できました(詳細はgithub.com/o2platform/FluentSharp/issues/…の GH問題)
Dinis Cruz

これは私にとても感謝しました!追加sudo: requiredしたのは最後だけです。魅力のように機能します。
w0ns88 2017年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.