Сборка .a NET Core проекта с использованием Jenkins всегда ссылается на последнюю установленную версию SDK - PullRequest
0 голосов
/ 10 октября 2018

Я выполняю «Построение проекта или решения Visual Studio с использованием MSBuild» на Jenkins для нескольких проектов для создания пакетов 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]

После удаления версии SDK 2.1.400 я получаю сообщение об ошибке:

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 Server Hosting

Если вы хотите разместить автономные приложения на серверах Windows,модуль ASP.NET Core для IIS можно установить отдельно на серверах без установки среды выполнения .NET Core.Вы можете загрузить установщик Windows (серверный хостинг) и запустить следующую команду из командной строки администратора:

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

Я также добавил RuntimeFrameworkVersion в csproj, который не имел никакого эффекта.

<RuntimeFrameworkVersion>1.0.4</RuntimeFrameworkVersion>^

global.json также игнорируется

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

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Я думаю, здесь есть некоторая путаница..NET Core состоит из двух почти отдельных компонентов: SDK и Runtime.SDK используется для создания вашего кода, и для его запуска требуется среда выполнения.

Они имеют разные версии.Например, последняя версия SDK - 2.1.403, а последняя среда выполнения - 2.1.5.

Последняя версия SDK может быть нацелена на любую версию среды выполнения, выпущенную до нее.Таким образом, SDK 2.1.403 может создавать приложения, для работы которых требуется 2.0 или 1.0.

Вы можете принудительно использовать определенный SDK, используя файл global.json.Вам необходимо указать версию SDK, которая уже установлена.dotnet new globaljson создаст что-то, что вы можете редактировать версии. Но вам не нужно это делать.Вы можете просто использовать последний SDK и попросить его собрать для более старой среды выполнения, установив TargetFramework, как вы делаете.

Если вы делаете 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.json создается dotnet restore.Не могли бы вы просто пропустить этот шаг?

0 голосов
/ 10 октября 2018

Похоже, что вы можете указать версию SDK в global.json файле:

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

Источник: https://markheath.net/post/switching-between-netcore-sdk-versions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...