如何在C#或F#中使用Travis-CI
Travis CI持续集成服务正式支持多种语言 ,但不支持C#或F#。
我可以在我的.net项目中使用它吗?
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是一个构build工具,旨在成为Microsoft的MSBuild工具的一个实现。 要覆盖这个,你可以像这样设置脚本属性:
language: csharp solution: solution-name.sln script: ./build.sh
的NuGet
默认情况下,Travis将运行nuget restore solution-name.sln,它将恢复解决scheme文件中的所有NuGet包。 要覆盖这个,你可以像这样设置安装属性:
language: csharp solution: solution-name.sln install: - sudo dosomething - nuget restore solution-name.sln
看到丹尼尔森的答案是现在正式的做法。
有可能的。
你的项目需要在Mono上工作
在您自己的单声道机器上,使用terminal, cd
到您的解决scheme目录并运行命令xbuild
。 这可能会自动工作,也可能不会,因为你在visual studio中使用的function需要在单声道中进行一些调整。
需要注意的事项:
- 缺less文件错误,检查以确保文件名的大小写匹配您的
.csproj
Linux有窗口没有区分大小写的path。 - 如果您的项目自动恢复,Nuget要求您在运行
xbuild
之前export EnableNuGetPackageRestore=true
。 - 您的单声道实例可能没有根SSL证书,请使用
mozroots --import --sync
来安装它们。 - 此外,如果您看到丢失的文件错误,
nuget.*
而不是NuGet.*
.csproj中的引用已经知道存在于各种版本的nuget中。 - 在.target文件中基于空格的2.5 nuget目标文件中存在一个错误,在此解决
- 对于FSharp 3.0支持,您需要单声道3.0.X或更高版本(可能需要从源代码构build,但在Mac OS X上默认安装)
- 对于VS2013的FSharp项目,您可能需要编辑您的
.fsproj
以通过添加'$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT'
查看示例 ,从而在非Windows计算机上触发VS2012configuration。
单声道3.1.12,3.2.4和更高版本
- 单声道3.1.2,3.2.4和更高版本具有pcl支持,但也可以具有缺less的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,Windowsapp store应用(Windows 8)
- v4.0,Profile158 .NET Framework 4.5,Silverlight 5,Windows Phone 8,Windowsapp 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,Windowsapp store应用(Windows 8)
- v4.0,Profile42 .NET Framework 4.0.3,Silverlight 5,Windowsapp store应用(Windows 8)
- v4.0,Profile47 .NET Framework 4.5,Silverlight 5,Windowsapp store应用(Windows 8)
- v4.0,Profile5 .NET Framework 4,Windowsapp store应用(Windows 8)
- v4.0,Profile6 .NET Framework 4.0.3,Windowsapp store应用(Windows 8)
- v4.5,Profile49 .NET Framework 4.5,Windows Phone 8
- v4.5,Profile7 .NET Framework 4.5,Windowsapp store应用(Windows 8)
- v4.5,Profile78 .NET Framework 4.5,Windows Phone 8,Windowsapp store应用(Windows 8)
单声道3.0.12
- 单声道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.
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.
使用平台条件(在Mono 3.0.11或更低版本中提及)或升级到3.1.2。
单声道3.0.11或更早版本
- 缺less目标错误,如果它不是nuget,可能是因为您正在使用可移植类库目标或其他不存在的目标。 如果您的项目可以编译.net 4.0,您可以修改.csproj或.fsproj,以便在.net上构build便携式,并为.net 4.0构build单声道。 基本上通过单独的东西进入条件属性组
<PropertyGroup Condition="$(OS) == 'Windows_NT'"> <TargetFrameworkProfile>Profile46</TargetFrameworkProfile> </PropertyGroup>
或Condition="$(OS) != 'Windows_NT'
单声道您的里程可能会有所不同。
单声道2.10.X
- 另外,Mono v2.10缺less一些Nuget需要的Microsoft.Build类,可以将v3.0.X dll(非常小)复制到.nuget目录。 (我在这里使用它)
2.能够从命令行运行unit testing。
.ci/nunit.sh
是我自己的用于nunittesting的shell脚本,被检入回购的根目录。 所以我可以用nuget安装我想要的nunit-console版本,并且configuration各种类别的include / excludes。 你的里程可能会有所不同,但是这种技术应该适用于xunit等。或者用xbuild或者假冒来做自己的事情。
.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.configurationTravis for mono
单声道v3.8.0
对于testing最新的单声道,使用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设置构buildmatrix。 见下面的脚本
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
- 请参阅下面的答案以获取新的testing版定义
现在你应该很好的去使用你的C#项目的Travis。
这是关键 – 该项目必须在Mono上运行。 这主要适用于库式项目( AWS SDK .NET就是一个很好的例子),但需要更多的开发努力和纪律。 如果您正在为Windows平台(如WPF应用程序,Azure云服务,Windows Phone / Store应用程序甚至ASP.NET Web API)开发项目,则Linux构build环境将不起作用。
AppVeyor CI是一个面向Windows平台的托pipe持续集成服务,免费用于开源项目。 这就像Windows的特拉维斯CI!
您可以设置VS.NET解决scheme,自定义MSBuild项目,PSake或batch file的任何PowerShell脚本的构build过程。 此外,AppVeyor还内置了工件pipe理和部署框架。
如前所述, Travis CI 对C#有betatesting支持 。 我不敢直接使用。 而且nunit可以非常容易地被整合。 下面是一个.travis.yml文件的小例子,如果至less有一个unit testing失败,它会运行nunittesting并将构build标记为失败:
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
如果你想用F#的Travis CI,在GitHub上用FAKE和Packet,那么build议使用F#ProjectScaffold: