WPF: To run this application, you must install .NET Core

Обратил внимание, что в папке с запускным файлом из прошлой статьи (пример на WPF), после компиляции присутствуют ещё несколько файлов:
SingleInstance.deps.json
SingleInstance.dll
SingleInstance.exe
SingleInstance.pdb
SingleInstance.runtimeconfig.dev.json
SingleInstance.runtimeconfig.json

При этом раньше в результате компиляции получалось только три файла:
SingleInstance.exe
SingleInstance.exe.config
SingleInstance.pdb

Файлы с расширением .pdb нужны для отладки, поэтому я не понимаю, зачем они нужны в релизе. Генерацию подобных файлов можно отключить:
ProjectPropertiesBuildAdvanced[Output]Debugging Information = None

 

Я перенёс файл SingleInstance.exe на другой диск и попытался его запустить, но ничего не произошло. Тогда я перенёс также файл SingleInstance.dll. на этот раз, при попытке запустить приложение, я получил ошибку:

SingleInstance.exe

To run this application, you must install .NET Core.
Would you like to download it now?

 

Вообще у меня вроде как уже установлен необходимый пакет, ну да ладно — скачал и установил, но всё равно ошибка сохранилась.

Посмотреть список установленных сред выполнения .NET можно такой командой в PowerShell:

PowerShell
dotnet --list-runtimes

 

Про файлы базы данных программ (PDB) написано много всего. Но я всё равно не понял, зачем это нужно в релизе.

Приложение удалось запустить после того, как я перенёс третий файл: SingleInstance.runtimeconfig.json.

 

Вот его содержимое:

SingleInstance.runtimeconfig.json
{
  "runtimeOptions": {
    "tfm": "netcoreapp3.1",
    "framework": {
      "name": "Microsoft.WindowsDesktop.App",
      "version": "3.1.0"
    }
  }
}

Это конечно поменьше, но всё равно странно, зачем столько сложностей. Хотя вот здесь или здесь всё разложено по полочкам, так что можно почитать. Покопавшись в инете, нашёл способ запаковать всё это в один файл, чтобы в дальнейшем подобных недоразумений не возникало. Делается это с помощью «публикации».

Публикация приложения

1. В открытом проекте выбираем конфигурацию сборки Release:
WPF: To run this application, you must install .NET Core
2. В меню выбираем BuildPublish Имя_Вашего_Проекта
3. В окошке запроса выбираем режим публикации (в папку):
WPF: To run this application, you must install .NET Core
4. Нажав кнопку Next, указываем папку для публикации:
WPF: To run this application, you must install .NET Core
5. После нажатия кнопки Finish нужно будет отобразить все настройки, нажав на кнопку Show all settings:
WPF: To run this application, you must install .NET Core
6. Здесь нам нужно обязательно выбрать целевую платформу (в моём случае это win-x64), а также отметить опцию Produce single file:
WPF: To run this application, you must install .NET Core
7. После сохранения изменений, нажимаем кнопку Publish:
WPF: To run this application, you must install .NET Core

Вот теперь у нас получается только один запускной файл (если вы ранее отключили генерацию файла .pdb, о котором написано в начале статьи, то его не будет).

Update 13.02.23

Сегодня столкнулся с тем, что инструкция, описанная выше не работает по той причине, что в VS Community 2019 (версии 16.11.23) уже нет этих настроек. При публикации нам не предлагают настройки.
В связи с этим можно запустить публикацию из командной строки ViewTerminal

Developer Powershell
dotnet publish -r win-x64 /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true --output "C:\Users\Denis\source\repos\SingleInstance\publish"

Узнать текущую версию .NET можно из консоли:

Command Prompt
dotnet --list-sdks

Вывод на экран должен быть примерно таким:

7.0.102 [C:\Program Files\dotnet\sdk]
Хотя, для версии Visual Studio Community 2022, все настройки остались примерно такими же. Не знаю, что было с версией 16.11.23.

 



Подписаться
Уведомление о
guest
0 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments