web-dev-qa-db-ja.com

.NETアプリケーションはXamlParseExceptionを開始および受信できません

開発用PC(Window 7)にインストールして動作できるアプリを作成しました。

  • 開発環境:Window 7、VS-2010 WPF C#で。NET 4。NET 3.5の両方がインストールされている

他のクライアントコンピューター(XP SP3、2および1)では、エラーなしでインストールされますが、起動できません。タスクマネージャでは、アプリケーションが自動的に終了する前に、アプリケーションが短時間メモリを消費することがわかります。

開発用PCとさまざまなクライアント間で.NET 3.5の一貫性を確認しましたXPマシンは次のとおりです。

  • アプリケーションのターゲットは。NET 3.5(または.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.<.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()
   ‘⁄ FooSoftware.App.Main()


”–πÿ∏¸∂‡–≈œ¢£¨«Î≤Œ‘ƒ‘⁄ http://go.Microsoft.com/fwlink/events.asp µƒ∞Ô÷˙∫Õ÷ß≥÷÷––ƒ°£

このXamlParseExceptionが原因で、アプリがXP Window Machineで起動しなくなりました。何が起こっていますか?

33
KMC

XamlParseExceptionは、アプリケーションの起動時に問題が発生したときに発生する一般的なエラーです。 XamlParseExceptionだけでなく、問題の根本を特定するのに役立つ内部例外も追跡するように、アプリケーションのスタートアップコードを変更することをお勧めします。以下に例を示します。

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    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());
        }
    }
}
83
Simon Mourier

まず第一に、VS2010で構築した場合は実際に幸運が得られます..しかし、実際には targeted lower バージョンの.Net( 3.5、さらには2.0)。

少しのコードを投稿すれば間違いなく役立ちます。

アプリケーションに必要なすべてのファイル(app.configなど)をコピーしたことを確認してください。

このリンクは似ています:

Windows 7マシンで作成/コンパイルされた.NET 4プログラムは、XPでは実行されません

そして、次の優れたトラブルシューティングのヒントを示しています。

Fusion Log Viewerを使用

7
paulsm4

.NET 3.5を対象としていましたが、クライアントハット.NET 4をインストールして使用しました。文字列

Framework Version: v4.0.30319

これを教えてくれます。クライアントが.NET 3.5を実際に使用するように強制するには、アプリケーションに App.config を追加して、以下を追加する必要があります。

<configuration>
   <startup>
      <supportedRuntime version="v2.0.50727"/>
   </startup>
</configuration>

.NET 4はXAMLを異なる方法で処理するため、例外が発生している可能性があります。アプリケーションを.NET 4で実行しようとしましたか? App.configが提供されていない場合は、.NET Framework 3.5をターゲットにしているにもかかわらず、.NET Framework 4でアプリケーションをテストしました。クライアントが十分に素晴らしければ、ダンプファイルを作成させて、簡単に直接デバッグできるようにします。 SysInternalsツールスイートから Procdump をダウンロードし、アプリケーションとともにクライアントに送信します。彼に実行させる

procdump -ma -e -t -x foo.exe %temp%\dump.dmp

これにより、未処理の例外ごとに完全なプロセスダンプが生成され、プロセスが%TEMP%ディレクトリで終了すると別の例外が生成されます。 Visual Studio 2010では、ダンプ分析のサポートが大幅に強化されているため、Visual Studio 2010内で分析できます。Windbg(32ビット ここ )をダウンロードできない場合は、ダンプを読み込んで入力します

!-analyze -v

最後の例外が何であったかを確認します。これでうまくいくはずです。 右デバッグdll (.NET 2,3,3.5の場合はsos.dll、.NET 4の場合はclr.dll)をロードする管理拡張機能に問題がある可能性がありますが、オンラインのチュートリアルはたくさんありますどうやってするの。これに加えて、例外ハンドラをアプリケーションに追加して、アプリケーションが予期しない方法で終了したときにNiceログファイルを取得することをお勧めします。

出力が正しいスタックにつながらなかった場合は、!ClrStackと!Threadsを使用して、スタックに例外があるスレッドを見つけます。

6
Alois Kraus

リモートデバッグできます。基本的に、これはリモートデバッグサーバーをターゲットマシンにインストールし、アプリケーションの起動時にVisual Studioからアタッチすることで行われます。いくつかの詳細情報はここで見つけることができます: http://msdn.Microsoft.com/en-us/library/bt727f1t.aspx そしてここにやや高齢のチュートリアルがあります: http://www.cprogramming.com/tutorial/visual_studio_remote_debugging.html

デバッグシンボル(pdbs)を使用してデプロイする必要があり、デバッグするソフトウェアは、コードが含まれているバージョンと同じバージョンである必要があることに注意してください。

6

通常、プロセスの間にログファイルを配置するので、プログラムの流れがわかります。

これがコンソールアプリケーションの場合は、Console.WriteLine(some string)を配置してから、Console.ReadLine()を最後に配置して、プログラムの実行を一時停止できます。

5
Jonats

最近、同様の問題に遭遇しました。私が抱えていた問題は、Windows 7で.ico(アイコンファイル)を使用していたことです。しかし、XPではこれらのサポートはありません。アプリケーションでアイコンファイルを使用している場合は、それらを削除してみてください。これで問題が解決するかどうかを確認してください。

4
katie77

コードが機能するまで、コードの行とクラス/メソッド全体をコメントアウトし始めます(または、すべてをコメントアウトすることから始めます)。その後、ゆっくりとコード行やメソッド呼び出しなどを導入し始めます。それが壊れるまで。これにより、問題の原因となっている特定のコード/クラスまたは参照のアイデアが得られます。これは確かに退屈な方法ですが、同時に、かなり機械的なものであり、1時間ほどで、犯人についてかなり良い考えを持つはずです。

3
Chaitanya

「TryCathcWhen」関連の行は、起動時に未処理の例外を考えさせます。または起動時にcatchブロックで例外がスローされます。

スタートアップコードを確認すると役立ちます。

3
Alex

いくつかのコメントされたコードは、出力ファイルの実行に影響して、アプリで発生したような動作をすることを聞きました(特にVS 2010では他の以前のバージョンではありません)が、反対側では、昨年私が使用したプログラムに取り組んでいました開発コンポーネントスイート。あなたはその亀裂が.Net Framework 3.5で動作することを知っているので、私のプログラムプラットフォームは.Net Framework 4でした。あなたのアプリでも同じことが起こり、私のapp.iで起こったことが私のプラットフォームを3.5にダウングレードしなければならなかったのです経験はあなたが男を助ける。

私は別のことを言いたい、このいくつかのエラーはCPUアーキテクチャに依存しません。それについて心配しないでください。

幸運を。アリ・フォルギ

3
Ali Foroughi

デバッグで動作する.Net 2.0アプリがありましたが、リリースビルドではありません(インストール後)。アプリケーションから直接ログを取得していませんでした。エラーは.NETから直接発生しました。問題は、メイン内に静的なボイドMAIN()を持つ独自のプログラムクラスを作成し、try...catch..finallyブロック。何らかの理由で、.NETはfinallyで窒息していました。あなたのプログラムにはそのようなものがありますか?

1
Raystorm

これは、.NET 3.5/4のインストールが失敗した/正常に完了していないマシンで発生するのを見てきました。ただし、これも非常にまれです。

マシンにリモートデバッグをインストール(かなり簡単なプロセス)してから、Visual Studioでターゲットとしてリモートマシンを設定し、デバッグモードでプログラムを実行する必要があります。その後、プログラムがリモートマシンで起動し、Visual Studio内で完全なエラーが発生します。

1
Asti

これは本当に一般的なエラーです。私の場合、新しくインストールしたアプリケーションは、権限が不十分なため、独自のイベントソースを作成できませんでした。 「管理者」モードでアプリを1回実行することで解決((いもの)。すべての内部例外が処理されることを確認してください。イベントも情報源として適しています。

0
user2529145

私の場合、ユーザーが私が開発していた同じ.Net FWバージョンをインストールすると、問題は解決しました。 (FW 4.5.1があり、ユーザーはFW 4.0を持っていました)。

そのため、FWバージョンを確認します。

http://msdn.Microsoft.com/library/hh925568(v = vs.110).aspx

実行を再試行する前に、まったく同じものをインストールします

0
Mr_CRivera