Развертывание с помощью одного exe-файла VS2022 для .Net 6 WPF-приложение не работает
Рабочий процесс в VS2019:
- Я создаю WPF-App (.Net Framework) WPF4Test, используя .Net Framework 4.7.2
- Я помещаю команду подписи кода ("C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64\signtool.exe" sign /a /n "название моей компании" / t http: // timestamp.comodoca.com / Authenticode $(TargetPath)) на этапе пост-сборки
- Я создаю релиз и ввожу пароль сертификата в процессе подписи
- Папка bin \ Release содержит 3 файла (WPF4Test.exe, WPF4Test.exe.config, WPF4Test.pdb)
- Я копирую WPF4Test.exe в общую папку, и приложение является исполняемым и подписанным
Тестирую процесс в VS2022 с .Net 6
- Я создаю WPF-приложение WPF6Test с помощью .Net 6.0
- Я развертываю приложение в папке (в помощнике я должен дважды выбрать папку) (по умолчанию конфигурация выпуска и конечная среда выполнения переносятся)
- pubxml создан, и я публикую приложение
- Папка развертывания содержит 5 файлов (WPF6Test.deps.json, WPF6Test.dll, WPF6Test.exe, WPF6Test.pdb, WPF6Test.runtimeconfig.json)
- Я копирую WPF6Test.exe в общую папку, но приложение не запускается без сообщения об ошибке
Если я скопирую всю папку, чтобы поделиться и запустить приложение. Я могу удалить WPF6Test.deps.json и WPF6Test.pdb, но мне нужно 3 файла (WPF6Test.dll, WPF6Test.exe, WPF6Test.runtimeconfig.json).
Я возвращаюсь к VS2022 и добавляю дополнительный файл pubxml с измененной опцией профиля (независимый режим развертывания, создание одного файла, активация компиляции, готовой к запуску). Но теперь у меня есть 7 файлов (D3DCompiler_47_cor3.dll, PenImc_cor3.dll, PresentationNative_cor3.dll, vcruntime140_cor3.dll, WPF6Test.exe, WPF6Test.pdb, wpfgfx_cor3.dll).
Что мне нужно сделать, чтобы получить один exe-файл? Как я могу подписать этот exe-файл в процессе публикации?
2 ответа
Вам необходимо установить «IncludeAllContentForSelfExtract» в файле проекта или, если вы используете CLI для сборки «IncludeNativeLibrariesForSelfExtract».
Даже если вы отметите или установите один исполняемый файл, если вы создаете автономный исполняемый файл, он не будет включать собственные библиотеки.
Файл проекта (ваш-проект.csproj)
<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
.Net интерфейс командной строки
dotnet publish -r win-x64 /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true --self-contained true
Измените настройки профиля публикации,
- Выберите режим развертывания как зависящий от платформы.
- Выберите целевую среду выполнения, отличную от Portable (Создание одного файла недоступно для Portable)
- В разделе «Параметры публикации файла» выберите «Создать один файл».
Сохраните настройки профиля и повторите попытку публикации. Это должно создать один исполняемый файл.
Если вы выберете режим развертывания как автономный или независимый, он создаст 7 файлов, как вы упомянули.
Надеюсь, это поможет для публикации в один файл!