首页 > 解决方案 > 使用 Jenkins 构建 .a NET Core 项目始终引用最新安装的 SDK 版本

问题描述

我在 Jenkins 上为多个项目运行“使用 MSBuild 构建 Visual Studio 项目或解决方案”以生成 nuget 包。

使用的MSBuild是最新的Visual Studio Build Tools

项目中使用的.NET Core sdk的版本是1.0.4
Company.Core.csproj:

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

  <PropertyGroup>
    <TargetFramework>netcoreapp1.0</TargetFramework>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
  </PropertyGroup>

</Project>

但是,在执行构建时,使用的 SDK 版本始终是机器上安装的最新 SDK (2.x)。

C:\Program Files\dotnet\sdk\2.1.400\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(198,5): 
error NETSDK1064: Package Microsoft.CSharp, version 4.0.1 was not found. 
It might have been deleted since NuGet restore. Otherwise, NuGet restore might have only partially completed, which might have been due to maximum path length restrictions. 
[C:\Workspaces\Company.Core\Company.Core.csproj]

卸载 2.1.400 SDK 版本后,我收到错误:

C:\ProgramFiles\dotnet\sdk\1.1.10\Sdks\Microsoft.NET.Sdk\build\Microsoft.PackageDependencyResolution.targets(308,5): 
    error : Assets file 'C:\Workspaces\Company.Core\obj\project.assets.json' not found. Run a NuGet package restore to generate this file. [C:\Workspaces\Company.Core\Company.Core.csproj]

用于支持 .net Core 1.0.4 的安装是.NET Core 1.0.4 & 1.1.1 SDK 1.0.1,使用说明:

Windows 服务器托管

如果您希望在 Windows 服务器上托管独立应用程序,则可以在服务器上单独安装 IIS 的 ASP.NET Core 模块,而无需安装 .NET Core 运行时。您可以下载 Windows (Server Hosting) 安装程序并从管理员命令提示符运行以下命令:

DotNetCore.1.0.4_1.1.1-WindowsHosting.exe OPT_INSTALL_LTS_REDIST=0 OPT_INSTALL_FTS_REDIST=0

我还在csproj中添加了没有效果的RuntimeFrameworkVersion。

<RuntimeFrameworkVersion>1.0.4</RuntimeFrameworkVersion>^

global.json 也被忽略

{
  "sdk": {
    "version": "1.0.4"
  }
}

标签: jenkinsasp.net-coremsbuild.net-corecontinuous-integration

解决方案


我认为这里有些混乱。.NET Core 由两个几乎独立的组件组成:SDK 和运行时。SDK 用于构建您的代码,运行时需要运行它。

它们的版本不同。例如,最新的 SDK 是 2.1.403,而最新的 Runtime 是 2.1.5。

最新版本的 SDK 可以针对之前发布的任何版本的运行时。因此,2.1.403 SDK 可以构建需要 2.0 或 1.0 才能运行的应用程序。

您可以通过使用该global.json文件来强制使用特定的 SDK。您需要指定已安装的 SDK 版本。dotnet new globaljson将生成一些您可以在其中编辑版本的内容。但您不需要这样做。您可以使用最新的 SDK 并通过设置来要求它为较旧的运行时构建TargetFramework

如果你做 a dotnet restore,它error NETSDK1064: Package Microsoft.CSharp, version 4.0.1 was not found.仍然存在吗?第二个错误Assets file 'C:\Workspaces\Company.Core\obj\project.assets.json' not found. Run a NuGet package restore to generate this file.支持了这一点。project.assets.jsondotnet restore. _ 你会不会只是错过了那一步?


推荐阅读