Я ищу сообщение об ошибке и неясное поведение с приложением .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, все по умолчанию.
Существует ряд проблем с этим:
После запуска 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.Он не исчезает при повторном запуске чистой части.
Неясно, какая версия .NET Core была упакована.Я не могу найти никакой DLL в каталоге публикации, которая дает мне версию 2.2.3, во всех есть забавные случайные числа, такие как 4.6 или 10.0.Из другого более сложного проекта у меня сложилось впечатление, что откат не выполняется, и вместо этого опубликован .NET Core 2.2.0.У меня нет возможности проверить это.
На этой странице показано, как запрашивать версию среды выполнения платформы во время выполнения.Он показывает 2.2.3, когда я запускаю его из Visual Studio, но пустой, когда я запускаю автономное приложение.Так что это не работает для автономных приложений.
Как мне избавиться от сообщения об ошибке в Visual Studio и убедиться, что все версии верны (ожидайте, что приложение зависит от фреймворка)нацеливаться на 2.2.0 и запускать на 2.2.3, если он установлен; ожидать, что автономное приложение будет включать только биты 2.2.3)?
(я уже сообщал об ошибке в другом месте, но могу 'не могу найти, где это было. Не было никакого решения.)