Развертывание приложения C #, использующего сборки DirectX - PullRequest
2 голосов
/ 26 марта 2012

Я занимаюсь разработкой приложения, использующего 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 загружен и установлен последний автономный установщик, сборки регистрируются. Я не уверен насчет случая, когда они не устанавливаются, но это происходит. Часто.

Мои вопросы:

  1. Почему DirectX иногда регистрирует эти сборки, а иногда нет?
  2. Как правильно ссылаться на сборки DirectX изнутри приложение?

Ответы [ 2 ]

2 голосов
/ 30 марта 2012

Я не удивлен, что вы видите эти проблемы. Вы полагаетесь на чрезвычайно старый, более не поддерживаемый и более не поддерживаемый API. Последние установщики среды выполнения по-прежнему будут устанавливать сборки в целях совместимости, но по умолчанию они не включены, так как не ожидают, что их кто-либо будет использовать.

Честно говоря, они действительно старые (например, 10 лет), у них есть многочисленные известные ошибки и проблемы, которые никогда не будут исправлены , и есть вполне приемлемые замены там. Вам следует либо переключиться на один из них, либо смириться с решением таких проблем, пока вы продолжаете поддерживать свое приложение.

2 голосов
/ 26 марта 2012

Я испытал нечто подобное с библиотекой SimConnect, входящей в Flight Simulator. В этом случае оказалось, что DLL не была добавлена ​​в GAC, если пользователь установил Flight Simulator до того, как установил .Net framework.

Я предполагаю, что здесь происходит нечто подобное.

Это, конечно, означает, что это может произойти только в системах XP, которые по умолчанию не имеют .Net, и это следует исправить после переустановки DX после установки .Net.

...