Развернутое приложение C# с использованием WebView2 не может найти среду выполнения

#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