.NET Core - build/package for net451 on Linux (Travis CI)
.NET Core - build/package for net451 on Linux (Travis CI)
我有一个(私有)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.
(同样多次,System
、System.Core
、System.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 表示 "You can't build .NET Framework apps using CoreCLR today."(2015 年 11 月)。这仍然是真的,就这么简单吗? - 在这种情况下,我应该只使用 Travis build/test,跳过 net451
,并使用 Appveyor 进行构建、测试和部署到 NuGet?
那不是我的第一选择,但如果是这样,我如何选择告诉 dotnet build
跳过不受支持的框架目标?
理想情况下,我只需要重新调整我的依赖关系,或者理解 frameworkAssemblies
,或者 apt-get
构建环境中的其他内容..?
以 .NET Framework 目标为目标,例如net451
在 Travis 中,您需要安装 Mono。
我通过将 mono: none
更改为 mono: 4.0.5
来修复。
- 您可以使用
-f
参数告诉 dotnet build
和 dotnet test
跳过不受支持的框架目标,并放入您 执行的框架 想要编译。例如,要独占编译 net451
,您可以 运行 dotnet build -f 451
.
- 如果您想确保与最新版本的单声道而不是特定版本兼容,请考虑在您的
.travis.yml
文件中使用单声道的 latest
版本。这个愿望取决于你的要求。
- 您完全可以在本地机器和 Travis CI 中为 .NET Core 构建应用程序,然后在 .NET Framework 应用程序上使用它。但是,您必须绕过“.NET 平台标准”概念。要将该 .NET Core 应用程序用作传统 .NET Framework 应用程序中的依赖项,必须为 .NET Platform Standard 1.X 构建 .NET Core 应用程序(就像您对 1.6 所做的那样),这与某些版本的 .NET Framework 4.X.X。请参阅 this table 以彻底混淆跨操作系统兼容性。但是,由于 4.6.3 尚未发布,您还无法构建 .NET Standard 1.6 库并在传统的 .NET Framework 应用程序中依赖它。但是,您可以编写代码以使其与较低版本的 .NET 平台标准(1.5、1.4 等)兼容,它们仍然与 .NET Core 兼容,然后将该库用作已发布的依赖项传统 .NET Framework 应用程序的版本。
如果您想查看一个示例,here is a github repository with a .travis.yml
configuration file 构建在 Travis CI 的 .NET Core 和 Mono 中,用于 Linux 和 Mac OSX,以及 Appveyor 上的 .NET Core 和 .NET Framework for Windows。
我有一个(私有)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.
(同样多次,System
、System.Core
、System.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 表示 "You can't build .NET Framework apps using CoreCLR today."(2015 年 11 月)。这仍然是真的,就这么简单吗? - 在这种情况下,我应该只使用 Travis build/test,跳过 net451
,并使用 Appveyor 进行构建、测试和部署到 NuGet?
那不是我的第一选择,但如果是这样,我如何选择告诉 dotnet build
跳过不受支持的框架目标?
理想情况下,我只需要重新调整我的依赖关系,或者理解 frameworkAssemblies
,或者 apt-get
构建环境中的其他内容..?
以 .NET Framework 目标为目标,例如net451
在 Travis 中,您需要安装 Mono。
我通过将 mono: none
更改为 mono: 4.0.5
来修复。
- 您可以使用
-f
参数告诉dotnet build
和dotnet test
跳过不受支持的框架目标,并放入您 执行的框架 想要编译。例如,要独占编译net451
,您可以 运行dotnet build -f 451
. - 如果您想确保与最新版本的单声道而不是特定版本兼容,请考虑在您的
.travis.yml
文件中使用单声道的latest
版本。这个愿望取决于你的要求。 - 您完全可以在本地机器和 Travis CI 中为 .NET Core 构建应用程序,然后在 .NET Framework 应用程序上使用它。但是,您必须绕过“.NET 平台标准”概念。要将该 .NET Core 应用程序用作传统 .NET Framework 应用程序中的依赖项,必须为 .NET Platform Standard 1.X 构建 .NET Core 应用程序(就像您对 1.6 所做的那样),这与某些版本的 .NET Framework 4.X.X。请参阅 this table 以彻底混淆跨操作系统兼容性。但是,由于 4.6.3 尚未发布,您还无法构建 .NET Standard 1.6 库并在传统的 .NET Framework 应用程序中依赖它。但是,您可以编写代码以使其与较低版本的 .NET 平台标准(1.5、1.4 等)兼容,它们仍然与 .NET Core 兼容,然后将该库用作已发布的依赖项传统 .NET Framework 应用程序的版本。
如果您想查看一个示例,here is a github repository with a .travis.yml
configuration file 构建在 Travis CI 的 .NET Core 和 Mono 中,用于 Linux 和 Mac OSX,以及 Appveyor 上的 .NET Core 和 .NET Framework for Windows。