System.IO.FileLoadException при запуске программы C # на другом компьютере - PullRequest
3 голосов
/ 17 сентября 2011

В настоящее время я работаю над C # WPF-проектом, который использует MySQL.Data и System.Data.Sqlite dll, а также несколько других.

Проект представляет собой проект .Net 4, который без проблем работает на моей машине разработки. Я создаю установочный пакет MSI, и когда я добавляю исполняемый файл, Visual Studio обрабатывает зависимости и добавляет необходимые DLL с помощью EXE.

Когда я запускаю установщик на моей машине для разработки, все работает нормально. Однако, когда я копирую установщик на пустую виртуальную машину с установленными .Net Framework 3.5 и .Net Framework 4, установщик говорит, что все успешно установлено, когда я смотрю в папку программных файлов, все DLL тоже есть, но когда Я пытаюсь запустить программное обеспечение, которое не загружается, и в средстве просмотра событий отображается ошибка .Net Runtime.

Ошибка выглядит следующим образом

Приложение: MySQLBackup.exe Framework Версия: v4.0.30319 Описание: процесс был прерван из-за необработанного исключения. Информация об исключении: System.IO.FileLoadException Стек: в MySQLBackup.App.Application_Startup (System.Object, System.Windows.StartupEventArgs) в System.Windows.Application.OnStartup (System.Windows.StartupEventArgs) в System.Windows.Application. <. ctor> b__1 (System.Object) в System.Windows.Threading.ExceptionWrapper.InternalRealCall (System.Delegate, System.Object, Int32) в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen (System.Object, System.Delegate, System.Object, Int32, System.Delegate) в System.Windows.Threading.DispatcherOperation.InvokeImpl () в System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext (System.Object) в System.Threading.ExecutionContext.runTryCode (System.Object) в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup (TryCode, CleanupCode, System.Object) в System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) в System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) в System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) в System.Windows.Threading.DispatcherOperation.Invoke () в System.Windows.Threading.Dispatcher.ProcessQueue () в System.Windows.Threading.Dispatcher.WndProcHook (IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef) в MS.Win32.HwndWrapper.WndProc (IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef) в MS.Win32.HwndSubclass.DispatcherCallbackOperation (System.Object) в System.Windows.Threading.ExceptionWrapper.InternalRealCall (System.Delegate, System.Object, Int32) в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen (System.Object, System.Delegate, System.Object, Int32, System.Delegate) в System.Windows.Threading.Dispatcher.InvokeImpl (System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32) в MS.Win32.HwndSubclass.SubclassWndProc (IntPtr, Int32, IntPtr, IntPtr) в MS.Win32.UnsafeNativeMethods.DispatchMessage (System.Windows.Interop.MSG ByRef) в System.Windows.Threading.Dispatcher.PushFrameImpl (System.Windows.Threading.DispatcherFrame) в System.Windows.Threading.Dispatcher.PushFrame (System.Windows.Threading.DispatcherFrame) в System.Windows.Threading.Dispatcher.Run () в System.Windows.Application.RunDispatcher (System.Object) в System.Windows.Application.RunInternal (System.Windows.Window) в System.Windows.Application.Run (System.Windows.Window) в System.Windows.Application.Run () в MySQLBackup.App.Main ()

Сообщение об ошибке на самом деле не помогает мне понять, что не так, поэтому в событии запуска приложения я добавил операторы try catch, но исключение никогда не перехватывается. Я также добавил метод try catch вокруг InitialiseComponent(), который выполняется в первом диалоговом окне, которое должно загрузиться, но опять-таки перехват никогда не перехватывается, поэтому я не вижу, что является причиной ошибки.

Как я могу выяснить, что это за проблема, и исправить ее?

Ответы [ 3 ]

4 голосов
/ 17 сентября 2011
How can I figure out what this problem is and fix it.

Выполнение удаленной отладки с помощью удаленного отладчика visual studio .

Этот учебник дает представление о том, как его использовать.

Когда вы ознакомитесь с VS Remote Debug, вы всегда будете использовать этот мощный инструмент для тестирования напотенциальная клиентская среда.

Что касается вашей конкретной проблемы, у вас есть некоторый код в обработчике событий Application.Startup, который пытается загрузить какой-то файл и завершается неудачно.Опубликуйте код в своем App.xaml, чтобы мы могли проанализировать, если вы не сможете найти источник проблемы самостоятельно.

3 голосов
/ 17 сентября 2011

Fuslogw может помочь в расследовании ошибок с привязкой библиотеки. См. Fuslogvw.exe (Просмотр журнала привязки сборки)

Как создать соединение Sqllite?Может быть, это сообщение поможет DbProviderFactory

0 голосов
/ 17 сентября 2011

Согласно трассировке стека проблема возникает в Application_Startup, который был вызван OnStartup.Поэтому вы должны проверить, реализовали ли вы / переопределили или подключили к тем событиям в коде, который может быть герингирует эти исключения.Поскольку существует несколько методов подписки на обработчик событий, нет гарантии, что проблема в вашем коде.

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

Вы также можете использовать удаленную отладку, чтобы попытаться сузить местоположение ошибки.

Существует также пара обработчиков исключений необработанных исключений, которые вы можетеgoogle и узнайте, как реализовать так, чтобы вы могли выполнять ведение журнала при возникновении ошибки, но обычно на этом этапе уже слишком поздно получать больше информации, кроме изящного закрытия, так что это, вероятно, подход alst ditch.

Вытакже можно использовать такие инструменты SysInternals, чтобы определить, к каким файлам пытается получить доступ программа, и отфильтровать до сбоев: http://technet.microsoft.com/en-us/sysinternals/bb896645

Вы можете определить, каким был последний файл, к которому она пыталась получить доступ, и дажевозможно посмотреть, в чем ошибка на уровне ОС.Я нашел этот инструмент полезным для решения странных проблем с доступом к файлам.Хотя, чтобы понять это, нужно время.

...