Я занимаюсь разработкой приложения, использующего DirectX для рендеринга графики. Я должен указать, что я не использую XNA или SlimDX, хотя я, вероятно, должен. Однако я не знал об этом при запуске проекта, и сейчас уже слишком поздно, так как потребуется много времени, чтобы перейти на любой из них.
Тем не менее, мне нужно развернуть приложение для пользователей. В моем проекте я ссылался на следующие сборки:
- Microsoft.DirectX
- Microsoft.DirectX.Direct3D
- Microsoft.DirectX.Direct3DX
Мне нужны только эти сборки, больше ничего. Пользователям необходимо установить DirectX на своих компьютерах в качестве предварительного условия. Поэтому я обнаружил, что включать эти DirectX DLL в папку приложения или GAC не нужно.
У меня проблемы с некоторыми средами, в то время как другие работают отлично. Я проследил проблему до того, зарегистрированы ли сборки DirectX в% windir% \ assembly. Если здесь перечислены сборки DirectX, приложение запускается. Если нет - он не запускается.
Проблема в том, что, хотя DirectX установлен на всех компьютерах (dxdiag работает, в нем перечислены файлы DirectX), некоторые из них не имеют этих сборок, перечисленных там. Когда это происходит, происходит сбой приложения с исключением System.IO.FileNotFound:
Не удалось загрузить файл или сборку 'Microsoft.DirectX.Direct3D, версия = 1.0.2902.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35' или одна из ее зависимостей. Система не может найти указанный файл.
Например, если с веб-сайта Microsoft загружен и установлен последний автономный установщик, сборки регистрируются. Я не уверен насчет случая, когда они не устанавливаются, но это происходит. Часто.
Мои вопросы:
- Почему DirectX иногда регистрирует эти сборки, а иногда нет?
- Как правильно ссылаться на сборки DirectX изнутри
приложение?