Приложение .NET не может запускать и получать XamlParseException
Я написал приложение, которое может устанавливать и работать на моем компьютере разработки (окно 7).
- Среда разработки: окно 7, VS2010 WPF C # с установленными .NET 4 и .NET 3.5
На другом клиентском компьютере (XP SP3, 2 и 1) он устанавливается без ошибок, но не может запускаться. В диспетчере задач я вижу, что приложение занимает память кратко перед закрытием.
Я убедился, что совместимость .NET 3.5 у меня развивается на ПК и на разных клиентских компьютерах XP следующим образом:
- Запуск приложения на основе .net без .NET Framework
- Ошибка развертывания Heroku H10 (приложение разбилось)
- Как развернуть приложение JAX-RS?
- Какой метод вы используете для развертывания приложений ASP.Net в дикой природе?
- Выбор устройства для Android - мое устройство кажется офлайн
- Приложение предназначено для .NET 3.5 (или 3.5 Client Profile )
- Использовать установщик VS2010 для развертывания: задачи .NET 3.5 в состоянии запуска
- Никакой ошибки в отношении совместимости .NET во время отладки проекта приложения и установщика
eventvwr поймал следующее предупреждение:
¬º˛¿‡–Õ: ¥ÌŒÛ ¬º˛¿¥'¥: .NET Runtime ¬º˛÷÷¿‡: Œfi ¬º˛ ID: 1026 »'∆⁄: 2011-10-18 ¬º˛: 15:18:32 ”√ªß: N/A º∆À„ª˙: WWW-9DB69D5A3AF √Ë ˆ: Application: Foo.exe Framework Version: v4.0.30319 Description: ”…”⁄Œ¥æ≠¥¶¿Ìµƒ“Ï≥££¨Ω¯≥Ã÷'÷π°£ “Ï≥£–≈œ¢: System.Windows.Markup.XamlParseException ∂—'ª: '⁄ System.Windows.Markup.XamlReader.RewrapException(System.Exception, System.Xaml.IXamlLineInfo, System.Uri) '⁄ System.Windows.Markup.WpfXamlLoader.Load(System.Xaml.XamlReader, System.Xaml.IXamlObjectWriterFactory, Boolean, System.Object, System.Xaml.XamlObjectWriterSettings, System.Uri) '⁄ System.Windows.Markup.WpfXamlLoader.LoadBaml(System.Xaml.XamlReader, Boolean, System.Object, System.Xaml.Permissions.XamlAccessLevel, System.Uri) '⁄ System.Windows.Markup.XamlReader.LoadBaml(System.IO.Stream, System.Windows.Markup.ParserContext, System.Object, Boolean) '⁄ System.Windows.Application.LoadBamlStreamWithSyncInfo(System.IO.Stream, System.Windows.Markup.ParserContext) '⁄ System.Windows.Application.LoadComponent(System.Uri, Boolean) '⁄ System.Windows.Application.DoStartup() '⁄ System.Windows.Application.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() '⁄ FooSoftware.App.Main() ”–πÿ∏¸∂‡–≈œ¢£¨«Î≤Œ'ƒ'⁄ http://go.microsoft.com/fwlink/events.asp µƒ∞Ô÷˙∫Õ÷ß≥÷÷––ƒ°£
было это исключение XamlParseException, заставившее мое приложение не запускаться на XP Window Machine. Что происходит?
- Как я могу развернуть приложение .NET, использующее ODAC, без установки всего компонента пользователю?
- Dll как в бункере, так и в gac, который используется?
- Как изменить цвет фона в меню параметров?
- Определение версии сборки во время события после сборки
- Развертывание проекта Maven throws java.util.zip.ZipException: недопустимый заголовок LOC (плохая подпись)
- Приложение Java EE Enterprise: выполните некоторые действия по развертыванию / запуску
- развертывание фреймворка zend на сервере
- Как развернуть SQL Server Compact Edition 4.0?
XamlParseException
– общая ошибка, возникающая при возникновении проблемы при запуске приложения. Я предлагаю вам изменить код запуска приложения для отслеживания того, что действительно происходит, и получить не только исключение XamlParseException, но и внутреннее исключение (исключения), которое должно помочь вам определить корень проблемы. Вот пример:
namespace WpfApplication1 { /// /// Interaction logic for App.xaml /// public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { // hook on error before app really starts AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); base.OnStartup(e); } void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { // put your tracing or logging code here (I put a message box as an example) MessageBox.Show(e.ExceptionObject.ToString()); } } }
Для начала вам действительно повезло бы, если бы вы построили VS2010 .. но на самом деле были нацелены на более низкую версию .Net (3.5 или даже 2.0).
Было бы полезно, если бы вы разместили немного кода.
Убедитесь, что вы скопировали все необходимые файлы для своего приложения (app.config и т. Д.).
Эта ссылка похожа:
.NET 4 Программа, написанная / скомпилированная на компьютере под управлением Windows 7, не будет запускаться на XP
И это указывает на эти превосходные советы по устранению неполадок:
Использование Fusion Log Viewer
Вы можете удаленно отлаживать. В основном это делается путем установки удаленного сервера отладки на целевой машине, а затем прикрепляйте его к своей визуальной студии при запуске приложения. Более подробную информацию можно найти здесь: http://msdn.microsoft.com/en-us/library/bt727f1t.aspx, и здесь есть несколько пожилых учебников: http://www.cprogramming.com/tutorial/visual_studio_remote_debugging.html
Обратите внимание, что вы должны развернуть с помощью отладочных символов (pdbs), и отлаженное программное обеспечение должно быть в той же версии, в которой находится ваш код.
Несмотря на то, что вы настраивали .NET 3.5 на свой клиентский компьютер .NET 4 и использовали его. Струна
Framework Version: v4.0.30319
скажу мне это. Чтобы заставить вашего клиента фактически использовать .NET 3.5, вы должны добавить App.config в свое приложение и добавить:
Возможно, вы получаете исключение, потому что .NET 4 рассматривает ваш XAML по-другому. Вы пытались запустить приложение под .NET 4? Если у вас нет приложения App.config, вы все равно протестировали свое приложение с .NET Framework 4, хотя вы настроили .NET Framework 3.5. Если ваш клиент достаточно хорош, вы можете позволить ему создать файл дампа, чтобы у вас был простой способ его отладки. Загрузите Procdump из набора инструментов SysInternals и отправьте его вместе с вашим приложением на ваш клиент. Позвольте ему выполнить
procdump -ma -e -t -x foo.exe %temp%\dump.dmp
Это сгенерирует полный дамп процесса для каждого необработанного исключения и еще один, когда процесс завершится в каталог% TEMP%. Visual Studio 2010 получила гораздо более эффективную поддержку анализа дампов, поэтому вы должны иметь возможность анализировать ее в Visual Studio 2010. Если это не поможет, вы можете загрузить Windbg ( здесь 32 бит), загрузить дамп и тип
анализировать -v
чтобы узнать, каково последнее исключение. Это должно делать свое дело. Могут возникнуть проблемы с управляемыми расширениями для загрузки правильной DLL-отладки (sos.dll для .NET 2,3,3,5 и clr.dll для .NET 4), но есть много учебников онлайн, как это сделать. Помимо этого я бы рекомендовал добавить обработчики исключений в ваше приложение, чтобы вы получили хороший файл журнала, когда ваше приложение неожиданно завершается.
Если выход не привел к правильному стеку, который вы используете, используйте! ClrStack и! Threads, чтобы узнать, какие streamи имеют исключения в их стеке.
Обычно то, что я делаю, помещает файлы журналов между процессами, поэтому я знаю stream моей программы.
Если это консольное приложение, поместите Console.WriteLine (некоторая строка), а затем вы можете поместить Console.ReadLine () в конец, чтобы приостановить выполнение вашей программы.
В последнее время возникла аналогичная проблема. Проблема у меня была в Windows 7, я использовал .ico (файлы значков). Но на них нет поддержки. В своем приложении, если вы используете какие-либо файлы значков, попробуйте их удалить .. посмотрите, разрешает ли это использование.
Начните комментировать строки кода и целые classы / методы из своего кода, пока не получите его работу (или начните с комментирования всего). Затем медленно начинайте вводить строки вызова кода и метода и т. Д. Пока он не сломается. Это должно дать вам представление о каком-либо конкретном коде / classе или ссылке, которая вызывает проблему. Это, по общему признанию, утомительный метод, но в то же время довольно механический и в течение часа или около того у вас должно быть довольно хорошее представление о виновнике.
Я слышал, что некоторые комментированные коды, затронутые для выполнения выходного файла, вызывают подобное поведение для вашего приложения (особенно в VS 2010, а не в другой более ранней версии), но с другой стороны, в прошлом году я работал над программой, в которой я использовал Набор компонентов Dev. так как вы знаете, что его трещина работает только в .Net Framework 3.5, а моя программная платформа была .Net Framework 4. Что-то случилось для вашего приложения, произошедшего из-за моего приложения. Мне пришлось понизить мою платформу до 3.5, а ее работа хорошая. опыт поможет вам чувак.
Я хочу сказать кое-что еще, это некоторые ошибки не зависят от архитектуры процессора. Не беспокойтесь об этом.
удачи. Али Форуи
Строка, связанная с TryCathcWhen, заставляет задуматься о некоем необработанном исключении при запуске, или исключение бросается в блок catch при запуске.
Увидеть ваш код запуска было бы полезно.
Я видел, как это произошло на машинах, где установка .NET 3.5 / 4 завершилась неудачно или не была успешно завершена. Однако это также маловероятно.
Вы должны попытаться установить удаленную отладку на машине (довольно простой процесс), а затем установить удаленный компьютер в качестве цели в Visual Studio, запустить программу в режиме отладки. Затем программа запустится на удаленном компьютере, и вы получите полную ошибку в Visual Studio.
У меня было приложение .Net 2.0, которое работало с отладкой. Но не в сборке релизов (после установки). Я не получал никаких записей из моего приложения напрямую, мои ошибки пришли прямо из .NET. Проблема в том, что я создал свой собственный class программы со статическим void MAIN () внутри основного, у меня была try...catch..finally
блокировать. По какой-то причине .NET задохнулся finally
. У вас есть что-то подобное в вашей программе?
Это действительно общая ошибка. В моем случае недавно установленное приложение не смогло создать свой собственный источник событий из-за недостаточных разрешений. Разрешено (уродливое), запуская приложение один раз в режиме «как admin». Убедитесь, что все внутренние исключения обрабатываются. События также являются хорошим источником информации.
В моем случае проблема решена, когда пользователь установил ту же версию .Net FW, для которой я разрабатывал. (У меня FW 4.5.1 и у пользователя FW 4.0).
Итак, проверьте версию FW:
http://msdn.microsoft.com/library/hh925568(v=vs.110).aspx
И установите точно так же, прежде чем повторять попытку выполнить