在Linux上使用Mono构建VS 2017 MSBuild csproj项目

Muh*_*eed 9 msbuild mono travis-ci .net-core asp.net-core

我正在尝试使用最新的Mono和.NET Core 1.0.1工具(基于MSBuild的csproj工具)在Mac和Linux上使用Travis CI构建.NET Core项目.他们瞄准netstandard1.6.1,net45net461.我从Travis CI得到的错误是:

/usr/share/dotnet/sdk/1.0.1/Microsoft.Common.CurrentVersion.targets(1111,5):错误MSB3644:找不到框架".NETFramework,Version = v4.5"的引用程序集.要解决此问题,请为此框架版本安装SDK或Targeting Pack,或者将应用程序重新定位到已安装SDK或Targeting Pack的框架版本.请注意,程序集将从全局程序集缓存(GAC)中解析,并将用于代替引用程序集.因此,您的程序集可能无法正确定位到您想要的框架.

Mono不支持基于VS 2017 MSBuild的csproj项目吗?如何构建我的项目?

Jon*_*eet 6

据我所知,这里有两种选择:

  • 使用本期中FrameworkPathOverride描述的环境变量指向它们.

  • 将Travis构建限制为仅针对.NET Core构建.根据我的经验,这简单得多.

这是Noda Time .travis.yml文件,当我可以迁移时,它将用于Noda Time - 它至少可以说是初步的,但它确实构建了......

language: csharp
mono: none
dotnet: 1.0.1
dist: trusty

script:
  - dotnet restore src/NodaTime
  - dotnet restore src/NodaTime.Test
  - dotnet restore src/NodaTime.Serialization.Test
  - dotnet build src/NodaTime -f netstandard1.3
  - dotnet build src/NodaTime.Test -f netcoreapp1.0
  - dotnet build src/NodaTime.Serialization.Test -f netcoreapp1.0
  - dotnet run -p src/NodaTime.Test/*.csproj -f netcoreapp1.0 -- --where=cat!=Slow
  - dotnet run -p src/NodaTime.Serialization.Test/*.csproj -f netcoreapp1.0
Run Code Online (Sandbox Code Playgroud)

关于此的几点说明:

  • 与早期的SDK不同,我们现在需要单独恢复每个项目 - 顶级没有大的"dotnet恢复":(
  • 如果没有这样做,我感到很惊讶dist: xenial,但事实并非如此.(它声称环境不支持.NET Core.)我猜这会改变.
  • 我们正在使用NUnit,目前在新SDK中测试的唯一方法是使用NUnitLite,因此dotnet run运行测试
  • 我有点惊讶我不能只指定目录名称dotnet run(如dotnet restoredotnet build),但这似乎是事情的方式.我会找一个bug报告......

在任何情况下,我建议你有一个基于Windows的CI构建来检查一切建立和适用于Windows(理想情况下测试每个你支持框架).


Muh*_*eed 0

.NET Framework 目标包 Nuget 包

现在,您可以通过添加 NuGet 包在 Linux 上使用 Mono 构建新样式的 csproj 项目:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup Label="Build">
    <OutputType>Exe</OutputType>
    <TargetFramework>net472</TargetFramework>
  </PropertyGroup>

  <ItemGroup Label="Package References">
    <PackageReference 
      Include="Microsoft.NETFramework.ReferenceAssemblies" 
      PrivateAssets="All" 
      Version="1.0.0-preview.2" />
  </ItemGroup>

</Project>
Run Code Online (Sandbox Code Playgroud)

更多信息可以在Microsoft/dotnet GitHub 页面上找到。在撰写本文时,它处于预览状态,但我发现它确实有效。我发现的唯一问题是,dotnet test根据 xUnit 作者的说法,xUnit 项目不起作用,并且不是受支持的场景。