System.IO.FileNotFoundException

Это длинная история: недавно я создал приложение win32 в Visual Studio, использующее DirectX, и отправил его друзьям, чтобы убедиться, что оно работает на других машинах. У всех был установлен .NET, но приложение работало не у всех моих друзей.

В двух случаях возникают ошибки "не удалось загрузить файл или сборку Microsoft.DirectX.DirectInput версии 1.0.29..." при попытке запустить программу.

Я подумал, что у них должны быть другие версии .dll, и после некоторой проверки я обнаружил, что мои ссылки относятся к фиксированным версиям. Я изменил свойство «фиксированная версия» на false для всех dll DirectX, но они по-прежнему получали ошибки при попытке запустить приложение.

Наконец, я попытался скопировать все dll в ту же папку с приложением, и ошибки DirectX исчезли, но вместо этого они получили ошибку «System.IO.FileNotFoundException указанный модуль не может быть найден» в строке, где программа пыталась сделать Direct3D.Texture из изображения (ссылка на изображение была правильной).

Если вы можете помочь мне с советами по устранению любой из вышеперечисленных проблем, я был бы очень признателен!


person cantrem    schedule 25.06.2010    source источник
comment
Добро пожаловать в stackoverflow.com. Вы обнаружите, что получите лучшие ответы, если опубликуете рассматриваемый код... Трудно определить, что не так, не видя кода.   -  person Oded    schedule 26.06.2010
comment
Какую управляемую реализацию DirectX вы используете? СлимDX? XNA? Что-то другое?   -  person Aren    schedule 26.06.2010
comment
@Oded: Спасибо! Я уже могу сказать, что хорошо быть здесь. Что ж, я мог бы опубликовать код, но я не вижу, как это может быть полезно, поскольку проблема связана со ссылками (насколько я могу судить, они не совсем в коде). @Aren B: хм... хорошо, признаю, я не понимаю этого вопроса. В основном это просто C # с простыми .dll из .NET (управляемый DirectX)   -  person cantrem    schedule 26.06.2010


Ответы (3)


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

Обратите внимание, что управляемый DirectX в основном устарел, и во многих случаях XNA является лучшим выбором.

person Steve Dennis    schedule 25.06.2010
comment
Для справки, XNA заменил управляемый DirectX, но НИЧЕГО не похож на него. XNA — это игровая среда, а не управляемый портал для DirectX. - person Aren; 26.06.2010
comment
@Aren B: Я понимаю твою точку зрения. В таком случае, что бы вы предложили мне для работы? Я только начал заниматься настоящим программированием и до сих пор не уверен, куда пойти первым: есть DirectX, но есть и OpenGL, XNA как фреймворк и т. д. (в качестве языка я пока определенно остановлюсь на C#) Что бы вы сказали? скажите лучшее сочетание? - person cantrem; 26.06.2010
comment
@cantrem SlimDX, я не играл с ним, но это духовный преемник Managed DirectX. Дает вам более прямой доступ к DX по сравнению со слишком большим количеством уровней абстракции. - person Aren; 26.06.2010
comment
@Aren А вот и самое интересное: у меня есть приложение Windows, использующее SlimDX (для ввода с джойстика), я только что развернул его на другой машине и получил исключение FileNotFoundException ... Google SlimDX + FileNotFoundException привел меня сюда ;-) - person Hinek; 24.06.2011

Если вы используете ManagedDirectX, то есть быстрый и грязный способ решить эту проблему. и это просто копирование dll ManagedDirectX в тот же каталог. MS говорит, что это не сработает и определенно не очень подходит для продакшена. Но это сработает в большинстве случаев.

DLL как минимум:

Microsoft.DirectX.Direct3D.dll
Microsoft.DirectX.Direct3DX.dll
Microsoft.DirectX.dll
person albertjan    schedule 25.06.2010
comment
Да. Быстро, но очень грязно. И в данном случае это не сработало (в первом посте я писал, что вылезла еще одна интересная ошибка, когда я копировал dll в папку с приложением). - person cantrem; 26.06.2010

Возможно, ваша проблема уже решена.

У меня тоже была такая же проблема в течение 2 дней, и я, наконец, решил ее. Я пробовал так много решений, которые были предложены в Интернете, но ничего не помогло мне. Мой проект ссылается на другой проект, который, в свою очередь, ссылается на Microsoft.DirectX.Direct3DX.dll. Когда я запустил проект, я получил исключение: System.IO.FileNotFoundException: не удалось загрузить файл или сборку «Microsoft.DirectX.Direct3DX.DLL» или одну из ее зависимостей. Указанный модуль не может быть найден.

Оказывается, эта dll искала «одну из своих зависимостей» и не могла их найти, так как на моей машине не был установлен DirectX. Поэтому решением для меня было установить DirectX.

Перейдите по следующей ссылке для веб-установщика DirectX: http://www.microsoft.com/en-in/download/details.aspx?id=35

Я надеюсь, что это поможет другим, кто сталкивается с той же проблемой! :)

person Sruti Davis    schedule 10.03.2014