UWP FullTrustProcess не может загрузить dll

Я использую проект uwp и winforms как процесс полного доверия. В проекте winF я добавил ссылку через NuGet на Dotras.dll. Dll была добавлена ​​в ссылки, и все выглядит нормально, запуск из winforms напрямую работает хорошо. Но при запуске UWP и вызове fullTrustProcess (соединение в порядке, сообщения отправлены) и попытке вызвать исключение Dotras.dll.

Не удалось загрузить файл или сборку DotRas, Version = 1.3.5166.33435, Culture = нейтральный, PublicKeyToken = b378f04384b7892a или одну из их зависимостей. Система не может найти указанный файл.

Я пробовал добавить ссылку на проект UWP, но это не позволяет, потому что целью является ядро ​​.net, а DotRas - инфраструктура .net. Любые подсказки, куда поставить dll, чтобы она работала? Спасибо!


person PSMNH    schedule 01.11.2018    source источник


Ответы (1)


Убедитесь, что exe и dll развернуты в одной папке.

Вот как это сделать.

Откройте проект в Visual Studio, там есть папка Assets, обычно она используется для хранения изображений логотипов.

Поместите exe и dll в эту папку, щелкнув папку правой кнопкой мыши, выберите в меню «Добавить новый элемент» и установите для их Build Action значение Content, поэтому во время развертывания приложения они будут скопированы в каталог установки в C:\Program Files\WindowsApps\YouPackageFamilyName\ под та же Assets папка.

Убедитесь, что в файле appxmanifest указан правильный путь к исполняемому файлу.

<desktop:Extension Category="windows.fullTrustProcess" Executable="Assets\YourWinForms.exe">
</desktop:Extension>

Изменить: это не обязательно должна быть папка Assets, главное - добавить dll в проект с Build Action, установленным как Content, и поместить в ту же папку, что и exe.

person kennyzx    schedule 01.11.2018
comment
неправильный. Dotras.dll - это библиотека .net framework. Вы не можете загрузить его в проект UWP, потому что это основной проект .net. - person vasily.sib; 01.11.2018
comment
он не ссылается на dll, он добавляет новый элемент, вы можете добавить практически любой файл в проект, если его Build Action равен Content. - person kennyzx; 01.11.2018
comment
что вы можете. С тем же результатом вы можете создать пустой текстовый файл и переименовать его в Dotras.dll. Возникает исключение, потому что приложение пытается загрузить Dotras.dll, поэтому, если вы добавите его, FileNotFoundException будет заменен на BadImageException. Чем это может быть полезно? - person vasily.sib; 01.11.2018
comment
Возможно, вы не пробовали FullTrustProcessLauncher, это подход для вызова приложений win32 из UWP, как и Process.Start, он порождает новый процесс, это контекст этого вопрос. DLL не загружается в процесс приложения UWP, она загружается в отдельный процесс WinForm, поэтому BadImageException не выбрасывается. - person kennyzx; 01.11.2018
comment
о, теперь я вижу, вы где правы, извините за вводящие в заблуждение комментарии - person vasily.sib; 01.11.2018