#c# #.net #winforms #wix #webview2
Вопрос:
Я создал библиотеку DLL C# на основе .NET 4.6.1, которая имеет форму, содержащую элемент типа Microsoft.Web.WebView2.WinForms.WebView2
. В нем используется последняя (по состоянию на 6/21) версия пакета SDK, автоматически извлекаемая NuGet:
<ItemGroup>
<PackageReference Include="Microsoft.Web.WebView2">
<Version>1.0.864.35</Version>
</PackageReference>
</ItemGroup>
Это работает как заклинание при запуске из Visual Studio 17, а также при непосредственном нажатии на исполняемый файл в папках Выпуска или отладки.
Однако у моих конечных пользователей не будет ни SDK, ни возможности использовать NuGet для его получения, поэтому я устанавливаю среду выполнения WebView2 с помощью пользовательского действия установщика WiX. Это действие запускает установщик MicrosoftEdgeWebview2Setup.exe
начальной загрузки, который устанавливает среду выполнения. Я вижу, что версия среды выполнения Microsoft Edge WebView2 91.0.864.59 установлена на панели приложений и функций Windows после этого, поэтому установщик работает.
При всем этом установленное приложение больше не может запускать компонент WebView2. Он полностью игнорирует среду выполнения, и когда код вызывает форму, содержащую WebView2, я вижу следующее исключение:
Could not load file or assembly 'Microsoft.Web.WebView2.WinForms, Version=1.0.864.35, Culture=neutral, PublicKeyToken=2a8ab48044d2601e' or one of its dependencies. The system cannot find the file specified.
Исключение явно относится к SDK, а не к среде выполнения. Просматривая примечания к выпуску SDK 1.0.864.35 для поддержки среды выполнения, я вижу: «Минимальная загружаемая версия среды выполнения: 86.0.616.0 или новее». У меня установлен 91.0.864.59, так что это должно сработать.
У меня лишь ограниченный опыт разработки в Windows, и это мое первое приложение на C# в любом месте, поэтому я, вероятно, упускаю что-то фундаментальное. Во время моих метаний я действительно увидел несколько ссылок на WebView2Loader.dll
это . Мне неясно, применимо ли это только к приложениям на C или это также имеет значение для C# — подавляющее большинство примеров кода и вопросов и ответов на эту дату по-прежнему в значительной степени сосредоточены на C (например, все документы по развертыванию). На тот случай, если эта библиотека DLL имеет значение для C#, я скопировал ее в свою целевую папку, но это ничего не дало.
Подводя итог, как развернуть приложение на C# с использованием компонента WinForm WebView2, чтобы оно использовало среду выполнения, а не установленный NuGet SDK?
Комментарии:
1. Распространение приложений с использованием WebView2 — Рекомендации по разработке WebView2-Возможно, обновите версию целевой платформы разработки до 4.8.
Ответ №1:
Ответ на этот вопрос заключается в том, что существует четыре библиотеки DLL, которые необходимо скопировать из SDK в каталог установленного приложения .exe
.
WebView2Loader.dll
Microsoft.Web.WebView2.Core.dll
Microsoft.Web.WebView2.Wpf.dll
Microsoft.Web.WebView2.WinForms.dll
Все четыре файла можно найти в каталоге пакетов NuGet. Это .nugetpackagesmicrosoft.web.webview21.0.864.35
в моей системе.
Все четыре также были скопированы в мою Release
папку во время процесса сборки каким-то подпроцессом msbuild
, но я не знаю, что конкретно это сделало или является ли это стандартным.
Установленное приложение WebView2 будет использовать среду выполнения тогда и только тогда, когда все четыре библиотеки DLL SDK будут скопированы в .exe
папку.
Комментарии:
1. Видеть
%UserProfile%.nugetpackagesmicrosoft.web.webview2<version>buildCommon.targets