方法 : ログ ファイルを作成します。

[このドキュメントはプレビュー版であり、後のリリースで変更されることがあります。 空白のトピックは、プレースホルダーとして挿入されています。]

プログラムの読み込みとネットワークの相互運用性、に関する診断情報を含むログ ファイル作成できます。 ログを有効に、レジストリ キーを設定できます。 最初に、一般的なログを有効にするには、レジストリ キー設定し、目的のログ コンポーネントおよびオプションのレジストリ キーを設定します。

以下の方法を使用してレジストリ キーを設定することができます。

  • Visual Studio 中には、リモート レジストリ エディターを使用します。

  • .NET Compact Framework 2.0 Service Pack 1 でリモート パフォーマンス モニターでログ オプションを使用します。 リモート パフォーマンス モニターについては、方法 : ファイル名を指定して実行時にパフォーマンスの監視 を参照してください。

  • .NET Compact Framework 3.5 で、ログ ツールを有効またはログを無効にする単純なグラフィカル ユーザー インターフェイスを提供する NetCFLogging.exe 使用できます。 .NET Compact Framework の電源社には、このツールが含まれます。 詳細については、Power Toy .NET Compact Framework を参照してください。

  • Registry と、 RegistryKey とそれ以降のバージョンでサポートされている .NET Compact Framework Version 2.0 クラスを使用します。

次の表は、ログ ファイル。

ログ コンポーネント

ログ ファイルの内容

相互運用

COM 相互運用機能呼び出しをログします。 プラットフォームに関する情報を提供呼び出しおよびマーシャリングします。

エラー

すべての未処理とネイティブの例外をログします。 エラーは、ログ ファイルを OutputDebugString 記録されます。 ログ ファイルは、現在のパスにある各アセンブリに対して作成され、現在のセッションに適用されます。 未処理またはネイティブ例外が最初に見つかった後、は、ログ ファイルを上書きします。

ローダー

プログラムの読み込みに関する情報を記録します。 持つ情報は次のファイル ヘッダーのとおりです。

  • アプリケーションの名前です。

  • Windows Embedded CE による) などのプロセス ID。

  • ローカルの日付と時刻、ログ ファイルが作成されたです。 形式がグローバルまたはカルチャに固有ではありません。

  • .NET Compact Framework バージョン、2.0.5021.00 など) です。

  • プラットフォームに関連したなどの情報 Windows Embedded CE v5.0.1400 (CEPC) WinCE5x86 デバッグ開発 i386 IJITv2。

ファイルには、次の情報提供されています。

  • 強制変換の状態 (互換モード)。

  • 信頼レベルは読み込まれているモジュールに割り当てられました。

  • メソッドの解決に失敗しました。

  • 型解決に失敗しました。

  • 検索またはアセンブリまたはモジュールの読み込みに失敗しました。

  • アセンブリの読み込みに成功します。

  • 無効なメタデータのバージョン。

  • プラットフォームの検索に失敗した DLL を呼び出します。

  • プラットフォーム内の関数の検索に失敗した DLL を呼び出します。

  • ポリシー ファイルまたはその休暇の実際の名前。

  • ポリシー ファイルの処理中に重大なエラーです。

  • マネージ アセンブリのポリシー ベースのリダイレクトします。

グローバル アセンブリ キャッシュに関する情報を追加することができるも。

ネットワーキング

ログのネットワーク トラフィック。 ネットワークのログ ファイルはバイナリと、.NET Compact Framework ログ ビューアー、Logviewer.exe せずにアクセスできません。 .NET Compact Framework 3.5 以降では、ログ ビューアーに、電源社の .NET Compact Framework の含まれます。 詳細については、Power Toy .NET Compact Framework を参照してください。

Windows ソケット層のネットワーク ログオンが発生したため、ログ ファイルがネットワークのパケット情報のみ含まれています。 これには暗号化されていない場合は、機密データがあります、ネットワーク経由で送信されるデータが含まれます。

ファイナライザー

ガベージ コレクターによって破棄されますが前に破棄されなかったオブジェクトのクラス名前を記録します。 このログは .NET Compact Framework 3.5 とそれ以降のバージョンではサポートします。

オブジェクト名は名前が、共通言語ランタイム (CLR) できないために、ログに含まれていません。 ただし、undisposed オブジェクトのクラス名これらのオブジェクトを識別役立てることができます。 undisposed オブジェクトはアプリケーションでパフォーマンスの問題を作成できます。

メモメモ
場合によっては、アプリケーション コードの代わりに、.NET Compact Framework ファイナライザーを呼び出します。

このファイルには、次の情報が含まれます。

  • 示す、ファイナライザーがガベージ コレクターは、上で実行時のタイムスタンプは、オブジェクト。

  • 終了したオブジェクトのクラス。

トレース

ログは Windows 通信基盤 (WCF) の例外をコードです。 デスクトップで .NET Framework は、次の 3 つの種類のログ サポートします。トレース、メッセージング、およびイベントのログ出力します。 .NET Compact Framework で WCF はトレースのみをコードの例外を追跡するログ サポートしますが警告とエラー メッセージは記録されません。

このログは .NET Compact Framework 3.5 とそれ以降のバージョンではサポートします。

既定では、ログ ファイルはアプリケーション中、診断がそのアプリケーションを含むディレクトリに書き込まれます。 ただし、指定できます、パスとその他のオプションとレジストリ キーとおり。

  • 代替パスが、ログ ファイルを記述してください。 これにはセキュリティで保護されたレジストリへの特権のアクセスが必要です。

  • ログ ファイル名に、アプリケーション名を含めます。

  • ログ ファイル名にプロセス ID を含める

「相互運用機能」、「エラー」、「ローダー」、「ネットワーク」、「ファイナライザー」、またはトレース"コンポーネントの を指定できますを次の要素は、ログ ファイル名を持ちます。

netcf_ アプリケーション名_コンポーネント_プロセス.log

アプリケーション名とプロセス ID は省略可能なレジストリ設定に基づきます。

たとえば、ローダー ログ ファイルという名前の MyApp.exe アプリケーションを可能性がありますというは名前とおり。

netcf_MyApp_Loader_2066923010.log

相互運用機能などのログ ファイルとローダー ログ ファイルを確認する方法については、ログ ファイルの情報 を参照してください。

ログの記録を有効にするには

  • 次の有効] にキー値を 1 に設定します。

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Enabled

    このキーの値は 6 種類のログを有効に設定する必要があります。相互運用機能、ローダー、エラー、ネットワーク、ファイナライザー、およびトレースします。 既定では、ログ下のサブキーが存在しないことを確認します。

    この値を 0 (ゼロ) に設定をすべてのログをオフすることができます。

(省略可能)、ログ ファイルのパスを指定

  • ログ ファイルの場所を表す文字列に、次のパス キーの値を設定します。

    HKLM\Security\.NETCompactFramework\Diagnostics\Logging\Path

    このキーは、セキュリティで保護されたレジストリに書き込むことができるアプリケーションによってのみアクセスできます。 パスが指定しない場合、ログ ファイルは、アプリケーションを含むディレクトリに書き込まれます。

名前 (省略可能) に、アプリケーションを含める

  • 1、次の UseApp キーの値を設定します。

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\UseApp

    このキーは、複数のアプリケーションを実行してアプリケーションごとに個別のログ ファイルを取得する場合に役立ちます。 2 つのアプリケーションを同じディレクトリにログ ファイルを作成している場合、古いログ ファイルは常にによって上書きされます新しいログ ファイルの 2 つ目のアプリケーションの実行時。 UseApp キーは、ログ ファイルのディフェレンシエータとして使用できます。

名前 (省略可能) に、プロセス ID を含める

  • 1、次の UsePid キーの値を設定します。

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\UsePid

    このキーは 1 つのアプリケーションを複数回実行して別のログの各インスタンスを作成する場合に役立ちます。 この設定では、アプリケーションの各インスタンスを別の名前で新しいログ ファイルを作成できるようにログ ファイル名にプロセス ID は、追加されます。

(省略可能) が発生するイベントを記録

  • 次のフラッシュのキー値を 1 に設定します。

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Flush

    この値と共通言語ランタイム (CLR) のバッファーのと、バッファーがいっぱいのときに書き込みではなく行われた、ログ ファイルにログのイベントを書き込む。 この設定は悪影響を及ぼす、アプリケーションのパフォーマンスに影響し、アプリケーションのタイミングを少し変更可能性があります。 ただし、できますアプリケーションの障害やその他のエラーに関連する問題の診断に役立ちます、エラーが発生した最後のいくつかイベントを表示先可能性があります。 このキーが存在またはしない設定ではない場合、バッファーがいっぱいになるまでデータは、ログ ファイルに書き込まれません。

相互運用ログ

相互運用ログを有効にするには

  • 次の有効] にキー値を 1 に設定します。

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Interop\Enabled

エラー ログの記録

エラー ログを有効にするには

  • 次の有効値は 1 に設定します。

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Error\Enabled

ローダー ログ

ローダー ログを有効にするには

  • ログ、ローダーを有効にする 1 に、次の有効値を設定またはログ、ローダーとグローバル アセンブリ キャッシュを有効にする 2 に設定します。

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Loader\Enabled

ネットワーク ログの記録

ネットワーク ログを有効にするには

  • 次の有効値は 1 に設定します。

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Network\Enabled

    ネットワークのログ ファイルはバイナリと、.NET Compact Framework ログ ビューアー、Logviewer.exe、バイナリ形式からログ人間が判読できる形式に変換することがなくを読み取れませんでした。 .NET Compact Framework 3.5 以降では、ログ ビューアーに、電源社の .NET Compact Framework の含まれます。 のページの .NET Compact Framework ダウンロードからこのツールをダウンロードできます。

ファイナライザーのログ

ファイナライザーのログを有効に

  • 次の有効値は 1 に設定します。

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Finalizer\Enabled

トレース ログの記録

WCF のトレース ログの記録を有効にするには

  • 次の有効値は 1 に設定します。

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\WCF\Enabled

使用例

レジストリ値を設定するアプリケーションを記述できます。 このセクションの例は、次の必要なレジストリのタスクを処理するメソッドが。

  • EnableLogging メソッドは、一般的なログを有効し、パラメーターを指定するには、ログ ファイルの代替のパスを指定するかどうか、アプリケーションの名前とプロセスの ID は、ログ ファイル名およびが発生したときにイベントが記録されるかどうかを指定する追加されます。

  • SetInteropLogging SetLoaderLogging、および SetNetworkLogging メソッドを設定、対応する有効] にキーの値を 1 にそのコンポーネントのログが有効にするようにします。

  • DisableLogging メソッドは、すべてのログを無効にします。

  • WriteLoggingSettings メソッド再帰的にログ サブキーの下に、キーをチェックし、ログ ファイルに名前と値を書き込みます。 ログ ファイル logsettings.txt という名前れ、このサンプル アプリケーションを含むディレクトリにあります。

                        ' This method enables general logging. It contains parameters
                        ' to specify a path, and Boolean values of true to include
                        ' the application name, process ID, and events in the log.
                        Private
                        Sub EnableLogging(ByVal useApp AsBoolean, ByVal usePid AsBoolean, ByVal useFlush AsBoolean) 
    ' Specify values for setting the registry.Dim userRoot AsString = "HKEY_LOCAL_MACHINE"Dim subkey AsString = "SOFTWARE\Microsoft\.NETCompactFramework\Diagnostics\Logging"Dim keyName AsString = userRoot + "\" + subkey

    ' Set the Enabled registry value.
    Registry.SetValue(keyName, "Enabled", 1)

    If useApp = TrueThen
        Registry.SetValue(keyName, "UseApp", 1)
    Else
        Registry.SetValue(keyName, "UseApp", 0)
    EndIfIf usePid = TrueThen
        Registry.SetValue(keyName, "UsePid", 1)
    Else
        Registry.SetValue(keyName, "UsePid", 0)
    EndIfIf useFlush = TrueThen
        Registry.SetValue(keyName, "UseFlush", 1)
    Else
        Registry.SetValue(keyName, "UseFlush", 0)
    EndIfEndSub
' This method sets the Enabled key value to 1' so that logging for Interoperability is enabled.PrivateSub SetInteropLogging(ByVal logOn AsBoolean) 
    ' Specify values for setting the registry.Dim userRoot AsString = "HKEY_LOCAL_MACHINE"Dim subkey AsString = "Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Interop"Dim keyName AsString = userRoot + "\" + subkey

    Dim logSet AsIntegerIf logOn = TrueThen
        logSet = 1
    Else
        logSet = 0
    EndIf    ' Set the registry value.Try
        Registry.SetValue(keyName, "Enabled", logSet)
        If logOn = TrueThen
            MessageBox.Show("Interop Logging On")
        Else
            MessageBox.Show("Interop Logging Off")
        EndIfCatch ex As System.Exception
        MessageBox.Show(ex.Message)
    EndTryEndSub

' This method sets the Enabled key value to 1' so that logging for class loading is enabled.PrivateSub SetLoaderLogging(ByVal logOn AsBoolean) 
    ' Specify values for setting the registry.Dim userRoot AsString = "HKEY_LOCAL_MACHINE"Dim subkey AsString = "Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Loader"Dim keyName AsString = userRoot + "\" + subkey

    Dim logSet AsIntegerIf logOn = TrueThen
        logSet = 1
    Else
        logSet = 0
    EndIf    ' Set the registry value.Try
        Registry.SetValue(keyName, "Enabled", logSet)
        If logOn = TrueThen
            MessageBox.Show("Loader Logging On")
        Else
            MessageBox.Show("Loader Loggin Off")
        EndIfCatch ex As System.Exception
        MessageBox.Show(ex.Message)
    EndTryEndSub

' This method sets the Enabled key value to 1,' so that logging for networking is enabled.PrivateSub SetNetworkLogging(ByVal logOn AsBoolean) 
    ' Specify values for setting the registry.Dim userRoot AsString = "HKEY_LOCAL_MACHINE"Dim subkey AsString = "Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Network"Dim keyName AsString = userRoot + "\" + subkey

    Dim logSet AsIntegerIf logOn = TrueThen
        logSet = 1
    Else
        logSet = 0
    EndIf    ' Set the registry value.Try
        Registry.SetValue(keyName, "Enabled", logSet)
        If logOn = TrueThen
            MessageBox.Show("Networking Logging On")
        Else
            MessageBox.Show("Networking Logging Off")
        EndIfCatch ex As System.Exception
        MessageBox.Show(ex.Message)
    EndTryEndSub

' This method disables all logging.PrivateSub DisableLogging() 
    ' Specify values for setting the registry.Dim userRoot AsString = "HKEY_LOCAL_MACHINE"Dim subkey AsString = "SOFTWARE\Microsoft\.NETCompactFramework\Diagnostics\Logging"Dim keyName AsString = userRoot + "\" + subkey

    ' Set the Enabled registry value.
    Registry.SetValue(keyName, "Enabled", 0)
    MessageBox.Show("Logging Disabled")

EndSub

' This method recursively examines the keys' under the Logging subkey and writes their' key names and values to a log file. It saves' the information in "logsettings.txt", located' in the directory that contains this example' application.PrivateSub WriteLoggingSettings() 
    Dim sw AsNew StreamWriter("logsettings.txt", False)
    sw.WriteLine("General Logging Settings:")
    Dim rkLogging As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\.NETCompactFramework\Diagnostics\Logging")
    Dim valNames AsString() = rkLogging.GetValueNames()
    Dim x AsIntegerFor x = 0 To valNames.Length
        sw.WriteLine(valNames(x).ToString() + ": " + rkLogging.GetValue(valNames(x)).ToString())
    Next x

    sw.WriteLine()
    sw.WriteLine("Interop Logging:")
    Dim rkInterop As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\.NETCompactFramework\Diagnostics\Logging\Interop")
    Dim interopNames AsString() = rkInterop.GetValueNames()

    For x = 0 To interopNames.Length
        sw.WriteLine(interopNames(x).ToString() + ": " + rkInterop.GetValue(interopNames(x)).ToString())
    Next x

    sw.WriteLine()
    sw.WriteLine("Loader Logging:")
    Dim rkLoader As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\.NETCompactFramework\Diagnostics\Logging\Loader")
    Dim loaderNames AsString() = rkLoader.GetValueNames()
    For x = 0 To loaderNames.Length
        sw.WriteLine(loaderNames(x).ToString() + ": " + rkLoader.GetValue(loaderNames(x)).ToString())
    Next x

    sw.WriteLine()
    sw.WriteLine("Networking Logging:")
    Dim rkNetworking As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\.NETCompactFramework\Diagnostics\Logging\Network")
    Dim netNames AsString() = rkNetworking.GetValueNames()
    For x = 0 To netNames.Length
        sw.WriteLine(netNames(x).ToString() + ": " + rkNetworking.GetValue(netNames(x)).ToString())
    Next x
    sw.Close()
EndSub
                        // This method enables general logging. It contains parameters
                        // to specify a path, and Boolean values of true to include
                        // the application name, process ID, and events in the log.
                        private
                        void EnableLogging(bool useApp, bool usePid, bool useFlush)
{
    // Specify values for setting the registry.string userRoot = "HKEY_LOCAL_MACHINE";
    string subkey = "SOFTWARE\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging";
    string keyName = userRoot + "\\" + subkey;

    // Set the Enabled registry value.
    Registry.SetValue(keyName, "Enabled", 1);

    if (useApp == true)
        Registry.SetValue(keyName, "UseApp", 1);
    else
        Registry.SetValue(keyName, "UseApp", 0);

    if (usePid == true)
        Registry.SetValue(keyName, "UsePid", 1);
    else
        Registry.SetValue(keyName, "UsePid", 0);

    if (useFlush == true)
        Registry.SetValue(keyName, "UseFlush", 1);
    else
        Registry.SetValue(keyName, "UseFlush", 0);
}

// This method sets the Enabled key value to 1// so that logging for Interoperability is enabled.privatevoid SetInteropLogging(bool logOn)
{
    // Specify values for setting the registry.string userRoot = "HKEY_LOCAL_MACHINE";
    string subkey = "Software\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging\\Interop";
    string keyName = userRoot + "\\" + subkey;

    int logSet;
    if(logOn == true)
      logSet = 1;
    else
      logSet = 0;

    // Set the registry value.try
    {
     Registry.SetValue(keyName, "Enabled", logSet);
     if(logOn == true)
        MessageBox.Show("Interop Logging On");
     else
        MessageBox.Show("Interop Logging Off");
     }
     catch(System.Exception ex)
     {
        MessageBox.Show(ex.Message);
     }
}

// This method sets the Enabled key value to 1// so that logging for class loading is enabled.privatevoid SetLoaderLogging(bool logOn)
{
    // Specify values for setting the registry.string userRoot = "HKEY_LOCAL_MACHINE";
    string subkey = "Software\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging\\Loader";
    string keyName = userRoot + "\\" + subkey;

    int logSet;
    if(logOn == true)
    logSet = 1;
    else
    logSet = 0;

    // Set the registry value.try
    {
        Registry.SetValue(keyName, "Enabled", logSet);
        if(logOn == true)
        MessageBox.Show("Loader Logging On");
        else
        MessageBox.Show("Loader Logging Off");
    }
    catch(System.Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

  // This method sets the Enabled key value to 1// so that logging for networking is enabled.privatevoid SetNetworkLogging(bool logOn)
  {
    // Specify values for setting the registry.string userRoot = "HKEY_LOCAL_MACHINE";
    string subkey = "Software\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging\\Network";
    string keyName = userRoot + "\\" + subkey;

    int logSet;
    if(logOn == true)
      logSet = 1;
    else
      logSet = 0;

    // Set the registry value.try
    {
         Registry.SetValue(keyName, "Enabled", logSet);
         if(logOn == true)
            MessageBox.Show("Networking Logging On");
         else
            MessageBox.Show("Networking Loggin Off");
     }
     catch(System.Exception ex)
     {
        MessageBox.Show(ex.Message);
     }
  }

// This method disables all logging.privatevoid DisableLogging()
{
    // Specify values for setting the registry.string userRoot = "HKEY_LOCAL_MACHINE";
    string subkey = "SOFTWARE\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging";
    string keyName = userRoot + "\\" + subkey;

    // Set the Enabled registry value.
    Registry.SetValue(keyName, "Enabled", 0);
    MessageBox.Show("Logging Disabled");
}

// This method recursively examines the keys// under the Logging subkey and writes their// key names and values to a log file. It saves// the information in "logsettings.txt" located
// in the directory that contains this // example application.privatevoid WriteLoggingSettings()
{
    StreamWriter sw = new StreamWriter("logsettings.txt",false);
    sw.WriteLine("General Logging Settings:");
    RegistryKey rkLogging = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging");
    string[] valNames = rkLogging.GetValueNames();
    for (int x = 0; x < valNames.Length; x++)
    {
        sw.WriteLine(valNames[x].ToString() + ": " + rkLogging.GetValue(valNames[x]).ToString());
    }

    sw.WriteLine();
    sw.WriteLine("Interop Logging:");
    RegistryKey rkInterop = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging\\Interop");
    string[] interopNames = rkInterop.GetValueNames();
    for (int x = 0; x < interopNames.Length; x++)
    {
        sw.WriteLine(interopNames[x].ToString() + ": " + rkInterop.GetValue(interopNames[x]).ToString());
    }

    sw.WriteLine();
    sw.WriteLine("Loader Logging:");
    RegistryKey rkLoader = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging\\Loader");
    string[] loaderNames = rkLoader.GetValueNames();
    for (int x = 0; x < loaderNames.Length; x++)
    {
        sw.WriteLine(loaderNames[x].ToString() + ": " + rkLoader.GetValue(loaderNames[x]).ToString());
    }

    sw.WriteLine();
    sw.WriteLine("Networking Logging:");
    RegistryKey rkNetworking = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging\\Network");
    string[] netNames = rkNetworking.GetValueNames();
    for (int x = 0; x < netNames.Length; x++)
    {
        sw.WriteLine(netNames[x].ToString() + ": " + rkNetworking.GetValue(netNames[x]).ToString());
    }
   sw.Close();
}

コードのコンパイル方法

この例では、次の名前空間への参照が必要です。

参照

概念

ログ ファイルの情報

その他の技術情報

最適化フレームワークのパフォーマンスと、.NET での診断