构建 C#、F# 或 Visual Basic 项目

本指南涵盖的内容 #

本指南涵盖了特定于 C#、F# 和 Visual Basic 项目的构建环境和配置主题。请确保先阅读我们的 教程一般构建配置 指南。

社区支持的语言 #

C#、F# 和 Visual Basic 支持是 Travis CI 中的社区支持。如果您遇到任何问题,请在 Travis CI 问题跟踪器 中报告,并 CC @joshua-anderson@akoeplinger@nterry

构建环境 #

目前,Travis 使用 Mono.NET Core 运行时在 Linux 或 macOS 上构建您的 C#、F# 和 Visual Basic 项目。请注意,这些运行时未实现整个 .NET 框架,因此 Windows .NET 框架程序可能不完全兼容,需要移植。

概述 #

C#、F# 和 Visual Basic 项目的设置如下所示

language: csharp
solution: solution-name.sln
YAML

当存在可选的 solution 键时,Travis 将运行 NuGet 包还原并构建给定的解决方案。

选择要测试的运行时和版本 #

Mono #

默认情况下,Travis CI 将使用最新的 Mono 版本。还可以针对特定版本的 Mono 测试项目。为此,请在 .travis.yml 中使用 mono 键指定版本。例如,要针对最新版本、3.12.0 和 3.10.0 进行测试

language: csharp
mono:
  - latest
  - 3.12.0
  - 3.10.0
...
YAML

您可以从以下 Mono 版本中进行选择

版本 已安装的软件包(仅限 Linux,macOS 始终包含所有内容)
3.10.0 及更高版本 mono-complete、mono-vbnc、fsharp、nuget、referenceassemblies-pcl
3.8.0 mono-complete、mono-vbnc、fsharp、nuget
3.2.8 mono-complete、mono-vbnc、fsharp
2.10.8 mono-complete、mono-vbnc
禁用 Mono(如果您只想使用 .NET Core,请参见下文)

注意:即使您指定了例如 3.12.0,构建中使用的版本实际上可能是 3.12.1,具体取决于 3.12.x 系列中的最新版本是什么(这是 Xamarin 存储库当前的限制)。

Alpha、Beta 和每周频道:要安装和针对即将发布的 Mono 版本进行测试,请指定 alphabetaweekly 作为版本号。请将您在这些频道上遇到的错误报告给 Mono 项目,以便他们在发布之前修复这些错误。

.NET Core #

默认情况下,Travis CI 不会针对 .NET Core 进行测试。要针对 .NET Core 进行测试,请将以下内容添加到您的 .travis.yml 中。请注意,至少需要一个 script <command> 才能构建。使用 dotnet restore 是一个很好的默认值。

language: csharp
mono: none
dotnet: 2.1.502
script:
 - dotnet restore
...
Yml

注意:您需要指定 .NET Core SDK 的版本号(不是 .NET Core 运行时)。

SDK 的版本号可以在 .NET Core 网站 上找到。

针对 Mono 和 .NET Core 测试 #

您可以使用 matrix.include 针对 Mono 和 .NET Core 进行测试。此示例针对最新的 mono 和 .NET Core 进行测试

language: csharp
solution: travis-mono-test.sln

jobs:
  include:
    - dotnet: 2.1.502
      mono: none
      env: DOTNETCORE=2  # optional, can be used to take different code paths in your script
    - mono: latest
...
YAML

附加组件 #

Coverity Scan 附加组件不受支持,因为它目前仅适用于 Windows 上的 msbuild。

运行单元测试(NUnit、xUnit 等) #

要运行您的单元测试套件,您需要先安装一个测试运行程序。推荐的方法是从 NuGet 安装它,因为这在 基于容器的 Travis 基础架构上也有效(即它不需要 sudo)。

以下示例显示了如何覆盖 installscript 来安装测试运行程序并将您的测试程序集传递给它以运行测试。

NUnit #

language: csharp
solution: solution-name.sln
install:
  - nuget restore solution-name.sln
  - nuget install NUnit.Console -Version 3.9.0 -OutputDirectory testrunner
script:
  - msbuild /p:Configuration=Release solution-name.sln
  - mono ./testrunner/NUnit.ConsoleRunner.3.9.0/tools/nunit3-console.exe ./MyProject.Tests/bin/Release/MyProject.Tests.dll
YAML

xUnit #

language: csharp
solution: solution-name.sln
install:
  - nuget restore solution-name.sln
  - nuget install xunit.runners -Version 1.9.2 -OutputDirectory testrunner
script:
  - msbuild /p:Configuration=Release solution-name.sln
  - mono ./testrunner/xunit.runners.1.9.2/tools/xunit.console.clr4.exe ./MyProject.Tests/bin/Release/MyProject.Tests.dll
YAML

注意:Mono 中存在一个 错误,导致 xUnit 2.0 在测试执行后挂起,建议您在修复之前坚持使用 1.9.2。

使用解决方案级 NuGet 包 #

另一种方法是将您选择的控制台测试运行程序添加为解决方案级 NuGet 包。

对于许多 .NET 项目,这将是在 ./.nuget/packages.config 中找到的文件。

nuget restore solution-name.sln 也会安装该包。

language: csharp
solution: solution-name.sln
script:
  - msbuild /p:Configuration=Release solution-name.sln
  - mono ./packages/xunit.runners.*/tools/xunit.console.clr4.exe ./MyProject.Tests/bin/Release/MyProject.Tests.dll
YAML

请注意使用文件名扩展(*)以避免必须硬编码测试运行程序的版本。

MSTest #

当针对 .NET Core 进行测试时,支持 MSTest 框架。示例

language: csharp
mono: none
dotnet: 2.1.502
solution: solution-name.sln
script:
  - dotnet restore
  - dotnet test
...
YAML

构建配置参考 #

您可以在我们的 Travis CI 构建配置参考 中找到有关 C# 的构建配置格式的更多信息。