2017-03-12 44 views
6

我有.NET Core projects我想在Mac和Linux上使用最新的Mono和.NET Core 1.0.1工具(基于MSBuild的csproj工具)构建Travis CI。他们的目标是netstandard1.6.1,net45net461。我从Travis CI得到的错误是:建设VS 2017 MSBuild csproj在Linux上使用Mono的项目

/usr/share/dotnet/sdk/1.0.1/Microsoft.Common.CurrentVersion.targets(1111,5): 错误MSB3644:为框架 参考组件没有找到“.NETFramework,Version = v4.5”。要解决此问题,请为此框架版本安装 SDK或定位套件,或将您的 应用重定向到您安装了SDK 或定位套件的框架版本。请注意,程序集将从全局程序集缓存(GAC)中解析出 ,并将用于替代 引用程序集。因此,您的程序集可能不正确 针对您打算的框架。

单声道不支持VS 2017基于MSBuild的csproj项目吗?我怎样才能让我的项目构建?

+0

如果针对.NET框架的配置文件,您应该使用Windows(AppVeyor)。 Linux上的.NET Core工具应该能够根据.NET Core配置文件进行编译。单声道不是必需的,它不是.NET Framework(提醒)。 –

+0

@LexLi:当你想测试一个项目的.NET Core构建(至少)在Linux上工作时,这是一个非常糟糕的解决方案。我现在正面临这个问题......我希望我能够添加一个答案。 –

+0

@JonSkeet绝对是一个不好的解决方案,它限制测试用例只能在Windows和.NET Framework上运行。但是在这种情况下,Mono没有资格替换.NET Framework(因为它可能会给测试用例增加额外的怪异性,而且我经常会面对我的开源项目)。 –

回答

4

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

  • 用作this issue描述指向他们FrameworkPathOverride环境变量。

  • 限制你的Travis版本只能建立在.NET Core上。根据我的经验,这是非常简单的。

这里的野田佳彦时间.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 

一些注意事项这样的:

  • 不像早期的软件开发工具包,我们现在需要单独还原每个项目 - 无大“的dotnet在顶层还原” :(
  • 当我没有在dist: xenial上运行时,我很惊讶,但它没有。 (它声称环境不支持.NET Core。)我的猜测是这会改变。
  • 我们使用NUnit的,而且目前在新的SDK测试的唯一方法是使用NUnitLite,因此dotnet run运行测试
  • 我微微一惊,我不能只指定目录名称为dotnet run(按照dotnet restoredotnet build),但似乎是事情的方式。我要追捕一个bug报告...

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

+0

我正在使用Cake(我也推荐它用于Nodatime)并解决了第二个选项,直到Microsoft获得对Mono的支持(有一个关于它的GitHub问题)。 –

+1

@MuhammadRehanSaeed:我有意向调查Cake,但现在我只想让所有事情都得到解决,而没有比我真正需要的任何更改。我的最后一个拦截器是docfx :( –

+0

这个答案可能已经过时了,现在看到其他答案,也就是说,我还没有完成它的工作, –

0

截至昨天(5月5日),@dasMulli指出,Mono发布了可与.NET Core搭配使用的Mono 5.0 Beta 2(5.0.0.94)!这里是his post on dotnet/sdk#335。下面是最新的beta release

我.travis.yml文件的链接的样子:

sudo: required 
dist: trusty 
language: csharp 
solution: MySolution.sln 
mono: 
    - beta 
dotnet: 1.0.3 

install: 
    - nuget restore MySolution.sln 
    - dotnet restore MySolution.sln 

script: 
    - msbuild /t:Rebuild MySolution.sln 
+0

我的travis.yml安装了目前版本为5.2.0的单声道'latest',我的版本仍然无法构建一个针对netstandard和net45的.NET Core项目https:// travis -ci.org/RehanSaeed/Serilog.Exceptions/jobs/266445606 –

相关问题