Приложение VB.net "не удалось загрузить файл или сборку" на компьютерах без установленной VS - PullRequest
0 голосов
/ 23 июня 2019

Я использую Microsoft Windows API Code Pack DirectX для определения памяти видеокарты пользователя. DLL должна быть запущена на платформе x64 или x86, а не AnyCPU. Тестируя приложение на компьютерах с установленной Visual Studio (VS), приложение правильно использует DLL, и я могу импортировать пространство имен; однако на компьютере, на котором не было установлено VS, выдается следующая ошибка:

"Необработанное исключение: System.IO.FileNotFoundException: Не удалось загрузить файл или сборку« Microsoft.WindowsAPICodePack.DirectX.dll »или одну из зависимостей . Указанный модуль не найден. Прикладная программа .Module1.Main () "

Затем я установил VS на эту машину, чтобы попытаться отладить ошибку, и затем программа сработала, но затем я удалил VS, и программа снова начала выдавать эту ошибку. Эта ошибка была на платформе x64, затем я попытался использовать платформу x86, чтобы понять, что использование 32-битной памяти с выделенной памятью возвращает неправильные ответы из-за дублирования. Для моей локальной копии в моем справочнике установлено значение True, приложение находится на .NET Framework 4.7.2, и все машины, на которых оно было протестировано, были 64-разрядными.

Imports Microsoft.WindowsAPICodePack.DirectX.Graphics

Module Module1

Private videomemory As String

Sub Main()
Dim factory As Factory1 = Factory1.Create()

For Each adapter As Adapter1 In factory.Adapters
Dim description As AdapterDescription = adapter.Description
videomemory = description.DedicatedVideoMemory     
Next adapter

Результаты с VS, установленным на 64-битной системе с использованием платформы приложений x64 для 4 ГБ выделенной памяти, было 4213178368. Затем с VS, установленным на 64-битной системе с использованием платформы приложений x86 с тем же GPU, выделенная память была 3221225472. Опять на 64-битной машине без VS, установленной на платформе x64, произошла ошибка, и при переключении на платформу приложений x86 приложение работало (распознало DLL). Я подозреваю, что это связано с тем, что при установке VS DLL требует чего-то, предлагаемого VS, и поэтому она ломается без VS и того, что нужно для x86 DLL, отличается от x64 DLL. Я не знаю, что нужно DLL, глядя на исходный код, он использует только mscorlib.dll, system.dll, system.core.dll, D2dl.dll, D3d11.dll, D310.dll, D310_1.dll, DXGI.dll и DWrite.dll Кроме того, DLL использует среду выполнения v4.0.30319. Вот некоторые попытки, которые я предпринял, потому что я уверен, что компьютер отсутствует или не нашел зависимости: переустановка Windows, загрузка DirectX Web Installer и перерегистрация всех моих DLL. К сожалению, ничего из этого не работает, поэтому он должен быть источником (зависимостью) от VS.

DLL можно найти здесь: https://www.nuget.org/packages/WindowsAPICodePack-DirectX/

Исходный код можно найти здесь: https://github.com/aybe/Windows-API-Code-Pack-1.1

...