Ошибки публикации и версии .NET Core - PullRequest
0 голосов
/ 01 апреля 2019

Я ищу сообщение об ошибке и неясное поведение с приложением .NET Core и автономной публикацией.Я только что установил .NET Core 2.2.3 SDK и создал простое консольное приложение под названием CoreVerTest с Visual Studio 2017 (15.9).На данный момент все в порядке.Там написано "Привет, мир!"когда я запускаю его.

Затем я перехожу к сценарию сборки, который создает автономные версии.Вот скрипт, build.cmd в каталоге проекта (где находится .csproj):

@echo off
set TargetFramework=netcoreapp2.2

:: Clean
if exist bin\Release\%TargetFramework% rd /s /q bin\Release\%TargetFramework% || goto error
dotnet clean -v m -c Release -nologo || goto error

:: Build
powershell write-host -fore Blue Building and publishing...
dotnet publish -c Release -nologo || goto error

powershell write-host -fore Blue Publishing for win-x64...
dotnet publish -c Release -r win-x64 -nologo || goto error

powershell write-host -fore Blue Publishing for linux-arm...
dotnet publish -c Release -r linux-arm -nologo || goto error

:: Exit
powershell write-host -fore Green Build finished.
timeout /t 2 /nobreak >nul
exit /b

:error
pause

Это очищает все и затем делает

  • нормальной версией сборки, зависящей от фреймворка
  • автономная сборка выпуска и публикация для Windows x64
  • автономная сборка выпуска и публикация для Linux ARM (моя основная целевая платформа)

Iвообще не трогал файл .csproj, все по умолчанию.

Существует ряд проблем с этим:

  1. После запуска build.cmd во время выполнения проектаоткрыть в Visual Studio, VS показывает мне это сообщение об ошибке:

    Ошибка NETSDK1061: Das Projekt wurde mit Microsoft.NETCore.App, версия 2.2.3 wiederhergestellt, aber mit den aktuellen Einstellungen würde stattdessen Version 2.2.0 verwendet werden.Умственные проблемы, проблемы, связанные с этим, и другие виды деятельности, связанные с производством и поставкой грузов.Dieses Problem tritt typischerweise auf, wenn die RuntimeIdentifier-Eigenschaft bei der Kompilierung oder Veröffentlichung, aber nicht bei der Wiederherstellung festgelegt wird.Weitere Informationen finden Sie unter https://aka.ms/dotnet-runtime-patch-selection.

    Ошибка исчезает после перестройки решения или перезапуска VS.Он не исчезает при повторном запуске чистой части.

  2. Неясно, какая версия .NET Core была упакована.Я не могу найти никакой DLL в каталоге публикации, которая дает мне версию 2.2.3, во всех есть забавные случайные числа, такие как 4.6 или 10.0.Из другого более сложного проекта у меня сложилось впечатление, что откат не выполняется, и вместо этого опубликован .NET Core 2.2.0.У меня нет возможности проверить это.

  3. На этой странице показано, как запрашивать версию среды выполнения платформы во время выполнения.Он показывает 2.2.3, когда я запускаю его из Visual Studio, но пустой, когда я запускаю автономное приложение.Так что это не работает для автономных приложений.

Как мне избавиться от сообщения об ошибке в Visual Studio и убедиться, что все версии верны (ожидайте, что приложение зависит от фреймворка)нацеливаться на 2.2.0 и запускать на 2.2.3, если он установлен; ожидать, что автономное приложение будет включать только биты 2.2.3)?

(я уже сообщал об ошибке в другом месте, но могу 'не могу найти, где это было. Не было никакого решения.)

1 Ответ

0 голосов
/ 01 апреля 2019

Редактирование для обработки обоих сценариев.

Попробуйте установить RuntimeFrameworkVersion, используя условие для RuntimeIdentifier:

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.2</TargetFramework>
  </PropertyGroup>

  <PropertyGroup Condition="'$(RuntimeIdentifier)' == 'win-x64'">
    <RuntimeFrameworkVersion>2.2.2</RuntimeFrameworkVersion>
  </PropertyGroup>

  <PropertyGroup Condition="'$(RuntimeIdentifier)' == 'linux-arm'">
    <RuntimeFrameworkVersion>2.2.2</RuntimeFrameworkVersion>
  </PropertyGroup>

</Project>

Примечание. Выше я установил для RuntimeFrameworkVersion значение 2.2.2, просто чтобы убедиться, что автономная публикация не просто подхватывает последнюю версию, установленную в моей системе. Вы можете установить его на нужную версию.

После сборки вы должны увидеть:

  1. В автономных развертываниях упоминается файл .deps.json 2.2.2 для Microsoft.NETCore.App. Их runtimeconfig.json будет пустым.
  2. Фреймворк-зависимый имеет runtimeconfig.json с версией 2.2.0 и поэтому подхватывает любые 2.2. *, Установленные в системе.
...