.NET Core - Linux上的net451构建/包(Travis CI)

时间:2016-09-15 07:22:50

标签: travis-ci .net-core

我有一个(私人)Github / Travis CI设置,我正在尝试验证PR并在发布分支上发布NuGet包。

这是我的.travis.yml

language: csharp
os: linux
dist: trusty
sudo: required
env: DOTNETCORE=1
dotnet: 1.0.0-preview2-003121
mono: none
before_script:
  - npm install
script:
  - gulp restore && gulp build && if [ $TRAVIS_BRANCH = 'v0.2' ]; then gulp package; fi

我使用gulp做一些额外的逻辑并构建步骤,但基本上它会正确调用所有内容..它所做的相关调用是:

dotnet restore

dotnet build **/project.json

前者成功,后者因针对net451的项目而失败。错误看起来似乎无法找到框架集合,这是有道理的,尽管我不确定最佳解决方法:

/home/travis/build/Secret/secret/src/Secret.Sample/project.json(7,52): error NU1001: The dependency mscorlib could not be resolved.

(同样多次,也适用于SystemSystem.CoreSystem.Xml ...)

这是一个示例project.json

{
    "version": "0.2.0-*",
    "description": "Description..",
  "dependencies": {
    "NETStandard.Library": "1.6.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0-alpha1-22107",
    "Microsoft.AspNetCore.Mvc": "1.1.0-alpha1-22107",
    "Microsoft.Extensions.Configuration.Json": "1.1.0-alpha1-22107",
    "Microsoft.Extensions.Configuration.CommandLine": "1.1.0-alpha1-22107",
    "Microsoft.Extensions.Options": "1.1.0-alpha1-22107",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.1.0-alpha1-22107",
    "Microsoft.Extensions.Logging.Console": "1.1.0-alpha1-22107",
    "Microsoft.Extensions.Logging.Debug": "1.1.0-alpha1-22107",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0-alpha1-22107"
  },
    "frameworks": {
        "netstandard1.6": {
        },
        "net451": {
            "buildOptions": {
                "define": [ "SAMPLEY_ON_WINDOWS" ]
            },
            "dependencies": {
                "Microsoft.Extensions.Logging.EventLog": "1.0.0"
            }
        }
    }
}

我找到https://github.com/aspnet/Home/issues/1090,其中David F表示"您今天无法使用CoreCLR构建.NET Framework应用程序。" (2015年11月)。这是真的,它就这么简单吗? - 在这种情况下我应该使用Travis构建/测试,跳过net451和Appveyor进行构建,测试和部署到NuGet?

这不是我的第一选择,但如果是这样,我怎么可以选择告诉dotnet build跳过不支持的框架目标?

理想情况下,我只需要重新构建我的依赖项,或者在构建环境中理解frameworkAssembliesapt-get其他内容。?

2 个答案:

答案 0 :(得分:1)

  1. 您可以告诉dotnet builddotnet test使用-f参数跳过不受支持的框架目标,并放入您想要的框架编译。例如,要专门编译net451,您可以运行dotnet build -f 451
  2. 如果您想确保与最新版本的mono而不是特定版本兼容,请考虑在latest文件中使用.travis.yml版本的mono。这种愿望取决于你的要求。
  3. 您绝对可以在本地包装盒和Travis CI中构建.NET Core应用程序,但在.NET Framework应用程序中使用它。但是,您必须围绕“.NET平台标准”跳舞。概念。要将.NET Core应用程序用作传统.NET Framework应用程序中的依赖项,必须为.NET Platform Standard 1.X构建.NET Core应用程序(正如您在1.6中所做的那样),它与某些版本对齐.NET Framework 4.XX请参阅this table以彻底混淆跨操作系统兼容性。但是,由于4.6.3尚未发布,您将无法构建.NET Standard 1.6库并在传统的.NET Framework应用程序中依赖它。但是,您可以编写代码使其与较低版本的.NET Platform Standard(1.5,1.4等)兼容,这些版本仍然与.NET Core兼容,然后将该库用作已发布的依赖项传统.NET Framework应用程序的版本。
  4. 如果您想看一个示例,here是一个带有a .travis.yml configuration file的github存储库,它构建在.NET Core&适用于Linux和Mac OSX的Travis CI Mono和.NET Core&适用于Windows的Appveyor上的.NET Framework。

答案 1 :(得分:0)

以.NET Framework目标为目标,例如在Travis中net451,您需要安装Mono。

我修改后将mono: none更改为mono: 4.0.5