Как объединить проект с WebView2 в один исполняемый файл (exe)?

Как создать единый исполняемый файл проекта, используя WebView2? Попробовал рекомендации отсюда (ссылка) о том, как скомпилировать проект на C# в один .exe файл. На моем компьютере это работало, но при переносе на другой компьютер возникает ошибка. 

PS: Моя задача - создать приложение с использованием WebView под ПК. Старый компонент WebBrowser мне не подходит, так как в нем не работают JavaScript-скрипты. Если у вас есть какие-либо рекомендации, чтобы обойтись без WebView2, пожалуйста, поделитесь ими.

PSS: Я уже рассматривал возможность использования Flutter, но не хотелось бы иметь большое количество зависимостей и DLL-файлов для реализации WebView на C#. Есть ли другие альтернативы?
Изображение к вопросу
  • 16 ноября 2023 г. 23:59
Ответы на вопрос 2
Для объединения проекта с WebView2 в один исполняемый файл (exe) вы можете использовать инструменты, такие как Fody и Costura.Fody.

1. Установите пакеты Fody и Costura.Fody в свой проект.
   ```
   Install-Package Fody
   Install-Package Costura.Fody
   ```

2. В файле `AssemblyInfo.cs` добавьте атрибут `[assembly:Costura.AssemblyLoaderSettings(Costura.AssemblyLoaderOption.PreferEmbedded)]` перед атрибутом `[assembly: AssemblyTitle("YourAppName")]`.

3. В файле `FodyWeavers.xml` добавьте следующий код:
   ```xml
   <?xml version="1.0" encoding="utf-8"?>
   <Weavers>
     <Costura />
   </Weavers>
   ```

4. Скомпилируйте и запустите проект. После успешной компиляции вы получите один исполняемый файл со всеми зависимостями, включая WebView2.

Если у вас все еще возникают проблемы при переносе на другой компьютер, убедитесь, что на другом компьютере установлена WebView2 Runtime. Вы можете добавить установку WebView2 Runtime в экзешник следующим образом:

1. Установите NuGet пакет `Microsoft.Web.WebView2.Store`.
2. В классе `App.xaml.cs` добавьте следующий код в метод `OnLaunched`:
   ```csharp
   Microsoft.Web.WebView2.Core.CoreWebView2EnvironmentOptions options = new Microsoft.Web.WebView2.Core.CoreWebView2EnvironmentOptions("--silent");
   Microsoft.Web.WebView2.Core.CoreWebView2Environment webView2Environment = await Microsoft.Web.WebView2.Core.CoreWebView2Environment.CreateAsync(null, null, options);
   ```

Также, касательно альтернатив для WebView2 в C#, кроме использования старого компонента WebBrowser, вы можете попробовать использовать встроенный браузер Chromium Embedded Framework (CEF) с помощью библиотеки CefSharp. Она предоставляет доступ к функциональности Chrome внутри C# приложений. Можно установить пакет NuGet `CefSharp.WinForms` или `CefSharp.Wpf` для поддержки Windows Forms или WPF соответственно.

Надеюсь, эти рекомендации помогут вам объединить проект с WebView2 в один исполняемый файл и найти альтернативы при необходимости.
При сборке приложения добавьте флаг --self-contained или установите рантайм на этот компьютер. 
Похожие вопросы