web-dev-qa-db-ja.com

Travis-CIをC#またはF#で使用する方法

Travis CI継続的統合サービスは、多くの 言語 を公式にサポートしていますが、C#またはF#はサポートしていません。

.netプロジェクトで使用できますか?

89
jbtule

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
14
danielnixon

これを公式に行う方法については、 danielnixonの答え を参照してください。

可能です。

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

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

注目すべきこと:

  • ファイルが見つからないというエラーです。ファイル名の大文字小文字が_.csproj_に一致することを確認してください。
  • Nugetでは、プロジェクトが自動復元される場合、xbuildを実行する前に_export EnableNuGetPackageRestore=true_を要求します。
  • モノインスタンスにルートSSL証明書がない場合があります。_mozroots --import --sync_を使用してインストールしてください。
  • また、ファイルが見つからないというエラーが表示された場合、.csprojの_nuget.*_参照の代わりに_NuGet.*_がさまざまなバージョンのnugetに存在することがわかっています。
  • .targetファイルの空白に基づいた2.5 nugetのターゲットファイルにバグがあります。回避策 here
  • FSharp 3.0をサポートするには、mono 3.0.X以降が必要です(ソースからビルドする必要がある場合がありますが、Mac OS Xにはデフォルトでインストールされます)
  • VS2013のFSharpプロジェクトの場合、'$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT'を追加して、Windows以外のマシンでVS2012構成をトリガーするために_.fsproj_を編集する必要がある場合があります example を参照してください。

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._ Use Platform Conditions(Mono 3.0.11以前で説明)を探すか、3.1.2にアップグレードします。

Mono 3.0.11以前

  • ターゲットが見つからないというエラー。それがナゲットでない場合は、おそらく、ポータブルクラスライブラリターゲットまたは存在しない他のターゲットを使用していることが原因です。プロジェクトが.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-c_ Mono v3.1.2を使用することにより、MacのディストリビューションをDMGからPKGに変更したため、インストールは非常に簡単です。このテンプレートはPortableをサポートする必要があります。クラスライブラリ、.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の場合

  • 新しいベータ版の定義については Answer below をご覧ください。

これで、C#プロジェクトでtravisを使用する準備が整いました。

149
jbtule

それが重要なポイントです-プロジェクトは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には、アーティファクト管理および展開フレームワークが組み込まれています。

25
Feodor Fitsner

すでに述べたように、 Travis CI にはベータ版があります C#のサポート 。使用するのは簡単ではありません。また、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
8
Roemer

Travis CIをF#、GitHub、FAKEおよびPacketで使用する場合は、F#ProjectScaffoldをお勧めします。

http://fsprojects.github.io/ProjectScaffold

1
Andrew Olney