Condividi tramite


Procedura: creare file di log

Aggiornamento: novembre 2007

È possibile creare file di log contenenti informazioni diagnostiche sull'interoperabilità, sul caricamento del programma e sulle reti. È possibile attivare la registrazione impostando le opportune chiavi del Registro di sistema. È necessario impostare innanzitutto una chiave di registro per attivare la registrazione generale, quindi le chiavi di registro per i componenti e le opzioni di registrazione desiderati.

Sono disponibili i metodi seguenti per impostare le chiavi del Registro di sistema:

  • Utilizzare Remote Registry Editor di Visual Studio.

  • In .NET Compact Framework 2.0 Service Pack 1 utilizzare le opzioni di registrazione di Remote Performance Monitor. Per ulteriori informazioni su Remote Performance Monitor, vedere Procedura: monitorare le prestazioni in fase di esecuzione.

  • In .NET Compact Framework 3.5 è possibile utilizzare lo strumento di registrazione NetCFLogging.exe che dispone di una semplice interfaccia grafica per l'attivazione e la disattivazione della registrazione. Questo strumento è incluso in Power Toys per .NET Compact Framework. Per ulteriori informazioni, vedere Power Toys for .NET Compact Framework (informazioni in lingua inglese).

  • Utilizzare le classi Registry e RegistryKey, supportate in .NET Compact Framework versione 2.0 e successive.

Nella tabella riportata di seguito sono riepilogati i file di log.

Componente di registrazione

Contenuto del file di log

Interop

Consente la registrazione delle chiamate all'interoperabilità COM. Fornisce informazioni sul richiamo piattaforma e sul marshalling.

Error

Consente la registrazione di tutte le eccezioni non gestite e native. Gli errori vengono registrati in un file di log e in OutputDebugString. Il file di log viene creato per ogni assembly nel percorso corrente ed è valido per la sessione corrente. Dopo la prima occorrenza di un'eccezione non gestita o nativa, il file di log viene sovrascritto.

Loader

Consente la registrazione delle informazioni sul caricamento del programma. L'intestazione del file contiene le informazioni seguenti:

  • Nome dell'applicazione.

  • ID processo (fornito da Windows Embedded CE).

  • Data e ora locali di creazione del file di log. Il formato non è globale né specifico delle impostazioni cultura.

  • Versione di .NET Compact Framework, ad esempio 2.0.5021.00.

  • Informazioni relative alla piattaforma, ad esempio Windows Embedded CE v5.0.1400 (CEPC) WinCE5x86 debug Dev i386 IJITv2.

Nel file sono fornite le seguenti informazioni:

  • Stato di coercizione (modalità di compatibilità).

  • Livello di attendibilità assegnato ai moduli al caricamento.

  • Impossibilità di risolvere il metodo.

  • Impossibilità di risolvere il tipo.

  • Impossibilità di trovare o caricare l'assembly o il modulo.

  • Caricamento assembly completato.

  • Versione dei metadati non valida.

  • Impossibilità di trovare la DLL PInvoke.

  • Impossibilità di trovare la funzione nella DLL PInvoke.

  • Nome o mancanza del file di criteri.

  • Errori principali di elaborazione del file di criteri.

  • Reindirizzamento degli assembly gestiti basato sui criteri.

È anche possibile includere informazioni sulla Global Assembly Cache.

Networking

Consente la registrazione del traffico di rete. Il file di log relativo alle attività di rete è binario ed è possibile accedervi solo utilizzando il visualizzatore log di .NET Compact Framework, Logviewer.exe. In .NET Compact Framework 3.5 e versioni successive il visualizzatore log è incluso in Power Toys per .NET Compact Framework. Per ulteriori informazioni, vedere Power Toys for .NET Compact Framework (informazioni in lingua inglese).

Poiché la registrazione delle attività di rete viene eseguita al livello di Windows Sockets, il file di log contiene solo informazioni sui pacchetti di rete, inclusi i dati inviati in rete, che possono essere riservati se non crittografi.

Finalizer

Registra il nome della classe di oggetti che non vengono eliminati prima di essere cancellati dal Garbage Collector. Questo log è supportato in .NET Compact Framework 3.5 e versioni successive.

I nomi degli oggetti non sono inclusi nel log perché non sono disponibili a Common Language Runtime (CLR). Tuttavia, i nomi di classe per gli oggetti non eliminati possono facilitarne l'identificazione. Gli oggetti non eliminati possono creare problemi di prestazioni nelle applicazioni.

Nota:

In alcuni casi, il finalizzatore viene chiamato da .NET Compact Framework anziché dal codice dell'applicazione.

In questo file sono incluse le seguenti informazioni:

  • Il time stamp che indica quando il finalizzatore ha eseguito il Garbage Collector sull'oggetto.

  • La classe dell'oggetto finalizzato.

Trace

Registra le eccezioni del codice per Windows Communication Foundation (WCF). Sul desktop, .NET Framework supporta tre tipi di registrazione: la registrazione dell'analisi, la registrazione dei messaggi e la registrazione degli eventi. WCF per .NET Compact Framework supporta unicamente la registrazione dell'analisi per tenere traccia delle eccezioni del codice. Non è prevista alcuna registrazione di messaggi di avviso o di errore.

Questo log è supportato in .NET Compact Framework 3.5 e versioni successive.

Per impostazione predefinita, i file di log vengono scritti nella stessa directory dell'applicazione che viene esaminata. È tuttavia possibile specificare un percorso e altre opzioni mediante le chiavi del Registro di sistema, come descritto di seguito:

  • Utilizzo di un percorso alternativo per la scrittura dei file di log. Per effettuare questa operazione è necessario disporre di accesso privilegiato al Registro di sistema sicuro.

  • Inclusione del nome dell'applicazione nel nome del file di log.

  • Inclusione dell'ID processo nel nome del file di log.

Un nome di file di log è composto dalle parti indicate di seguito, dove componente può essere "Interop", "Error", "Loader", "Network", "Finalizer" o "Trace":

netcf_nome-applicazione_componente_ID processo.log

Il nome dell'applicazione e l'ID processo sono facoltativi e si basano sulle impostazioni del Registro di sistema.

Un file di log del caricatore per un'applicazione denominata MyApp.exe può ad esempio essere denominato come segue:

netcf_MyApp_Loader_2066923010.log

Per informazioni su come esaminare i file di log, quali Interop e Loader, vedere Informazioni sui file di log.

Per attivare la registrazione

  • Impostare su 1 il valore della chiave Enabled seguente:

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

    Il valore di questa chiave deve essere impostato in modo da attivare i sei tipi di registrazione: Interop, Loader, Error, Networking, Finalizer e Trace. Per impostazione predefinita, la chiave Logging non contiene sottochiavi.

    È possibile disattivare tutti i tipi di registrazione impostando questo valore su 0 (zero).

Per specificare un percorso per il file di log (facoltativo)

  • Impostare il valore della chiave Path seguente su una stringa che rappresenta il percorso dei file di log:

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

    A tale chiave possono accedere solo le applicazioni cui è consentita la scrittura nel Registro di sistema sicuro. Se non viene specificato alcun percorso, il file di log viene scritto nella stessa directory dell'applicazione.

Per includere il nome dell'applicazione nel nome (facoltativo)

  • Impostare su 1 il valore della chiave UseApp seguente:

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

    Tale chiave risulta utile quando si desidera eseguire più applicazioni e ottenere file di log distinti per ogni applicazione. Se due applicazioni scrivono i file di log nella stessa directory, quando la seconda applicazione viene eseguita il file di log precedente verrà sempre sovrascritto da quello più recente. La chiave UseApp può essere utilizzata come elemento differenziatore per il file di log.

Per includere l'ID processo nel nome (facoltativo)

  • Impostare su 1 il valore della chiave UsePid seguente:

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

    Tale chiave risulta utile quando si desidera eseguire un'applicazione più volte e creare file di log distinti per ogni istanza. Questa impostazione consente di aggiungere l'ID processo al nome del file di log in modo che ogni istanza dell'applicazione crei un nuovo file di log con un nome differente.

Per registrare gli eventi secondo l'ordine di generazione (facoltativo)

  • Impostare su 1 il valore della chiave Flush seguente:

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

    Se si imposta questo valore, in Common Language Runtime (CLR) gli eventi di log vengono scritti nel file di log man mano che si verificano, anziché essere conservati nel buffer per poi essere scritti quando il buffer è pieno. Questa impostazione influisce negativamente sulle prestazione dell'applicazione e potrebbe modificare leggermente la temporizzazione dell'applicazione. Può tuttavia essere utile per diagnosticare i problemi relativi agli errori dell'applicazione o ad altri errori per i quali può essere utile visualizzare gli ultimi eventi che hanno restituito un errore. Se la chiave non è presente o non è impostata, i dati non verranno scritti nei file di log finché il buffer non sarà pieno.

Registrazione Interop

Per attivare la registrazione Interop

  • Impostare su 1 il valore della chiave Enabled seguente:

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

Registrazione degli errori

Per attivare la registrazione degli errori

  • Impostare su 1 il valore della chiave Enabled seguente:

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

Registrazione Loader

Per attivare la registrazione Loader

  • Impostare su 1 il valore della chiave Enabled seguente per attivare la registrazione per il caricatore o impostarla su 2 per attivare la registrazione per il caricatore e la Global Assembly Cache:

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

Registrazione Networking

Per attivare la registrazione Networking

  • Impostare su 1 il valore della chiave Enabled seguente:

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

    Il file di log Networking è binario e può essere letto solo utilizzando il visualizzatore di log Logviewer.exe di .NET Compact Framework che consente di convertire il log dal formato binario in un formato leggibile. In .NET Compact Framework 3.5 e versioni successive il visualizzatore log è incluso in Power Toys per .NET Compact Framework. Per scaricare questo strumento, visitare la pagina .NET Compact Framework Downloads (informazioni in lingua inglese).

Registrazione Finalizer

Per attivare la registrazione relativa al finalizzatore

  • Impostare su 1 il valore della chiave Enabled seguente:

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

Registrazione Trace

Per attivare la registrazione dell'analisi WCF

  • Impostare su 1 il valore della chiave Enabled seguente:

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

Esempio

Per impostare i valori delle chiavi del Registro di sistema è possibile utilizzare Remote Registry Editor o in alternativa scrivere un'applicazione che imposterà tali valori. Nell'esempio riportato in questa sezione sono contenuti i metodi seguenti per la gestione delle attività del Registro di sistema necessarie:

  • Il metodo EnableLogging consente di attivare la registrazione generale e contiene parametri utilizzabili per specificare un percorso alternativo per il file di log, per specificare se il nome dell'applicazione e l'ID processo verranno aggiunti al nome del file di log nonché per specificare se gli eventi verranno registrati man mano che si verificano.

  • I metodi SetInteropLogging, SetLoaderLogging e SetNetworkLogging consentono di impostare il valore della chiave Enabled corrispondente su 1 in modo da attivare la registrazione per tale componente.

  • Il metodo DisableLogging disattiva tutti i tipi di registrazione.

  • Il metodo WriteLoggingSettings esamina in modo ricorsivo le chiavi contenute nella sottochiave Logging e scrive i relativi nomi e valori in un file di log. Il file di log è denominato logsettings.txt e si trova nella directory contenente questa applicazione di esempio.

' 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 As Boolean, ByVal usePid As Boolean, ByVal useFlush As Boolean) 
    ' Specify values for setting the registry.
    Dim userRoot As String = "HKEY_LOCAL_MACHINE"
    Dim subkey As String = "SOFTWARE\Microsoft\.NETCompactFramework\Diagnostics\Logging"
    Dim keyName As String = userRoot + "\" + subkey

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

    If useApp = True Then
        Registry.SetValue(keyName, "UseApp", 1)
    Else
        Registry.SetValue(keyName, "UseApp", 0)
    End If 
    If usePid = True Then
        Registry.SetValue(keyName, "UsePid", 1)
    Else
        Registry.SetValue(keyName, "UsePid", 0)
    End If 
    If useFlush = True Then
        Registry.SetValue(keyName, "UseFlush", 1)
    Else
        Registry.SetValue(keyName, "UseFlush", 0)
    End If

End Sub

' This method sets the Enabled key value to 1
' so that logging for Interoperability is enabled.
Private Sub SetInteropLogging(ByVal logOn As Boolean) 
    ' Specify values for setting the registry.
    Dim userRoot As String = "HKEY_LOCAL_MACHINE"
    Dim subkey As String = "Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Interop"
    Dim keyName As String = userRoot + "\" + subkey

    Dim logSet As Integer
    If logOn = True Then
        logSet = 1
    Else
        logSet = 0
    End If 
    ' Set the registry value.
    Try
        Registry.SetValue(keyName, "Enabled", logSet)
        If logOn = True Then
            MessageBox.Show("Interop Logging On")
        Else
            MessageBox.Show("Interop Logging Off")
        End If
    Catch ex As System.Exception
        MessageBox.Show(ex.Message)
    End Try

End Sub


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

    Dim logSet As Integer
    If logOn = True Then
        logSet = 1
    Else
        logSet = 0
    End If 
    ' Set the registry value.
    Try
        Registry.SetValue(keyName, "Enabled", logSet)
        If logOn = True Then
            MessageBox.Show("Loader Logging On")
        Else
            MessageBox.Show("Loader Loggin Off")
        End If
    Catch ex As System.Exception
        MessageBox.Show(ex.Message)
    End Try

End Sub


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

    Dim logSet As Integer
    If logOn = True Then
        logSet = 1
    Else
        logSet = 0
    End If 
    ' Set the registry value.
    Try
        Registry.SetValue(keyName, "Enabled", logSet)
        If logOn = True Then
            MessageBox.Show("Networking Logging On")
        Else
            MessageBox.Show("Networking Logging Off")
        End If
    Catch ex As System.Exception
        MessageBox.Show(ex.Message)
    End Try

End Sub


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

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

End Sub


' 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.
Private Sub WriteLoggingSettings() 
    Dim sw As New StreamWriter("logsettings.txt", False)
    sw.WriteLine("General Logging Settings:")
    Dim rkLogging As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\.NETCompactFramework\Diagnostics\Logging")
    Dim valNames As String() = rkLogging.GetValueNames()
    Dim x As Integer
    For 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 As String() = 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 As String() = 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\Networking")
    Dim netNames As String() = rkNetworking.GetValueNames()
    For x = 0 To netNames.Length
        sw.WriteLine(netNames(x).ToString() + ": " + rkNetworking.GetValue(netNames(x)).ToString())
    Next x
    sw.Close()
End Sub
// 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.
private void 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.
private void 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.
  private void SetNetworkLogging(bool logOn)
  {
    // Specify values for setting the registry.
    string userRoot = "HKEY_LOCAL_MACHINE";
    string subkey = "Software\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging\\Networking";
    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.
private void 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.
private void 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\\Networking");
    string[] netNames = rkNetworking.GetValueNames();
    for (int x = 0; x < netNames.Length; x++)
    {
        sw.WriteLine(netNames[x].ToString() + ": " + rkNetworking.GetValue(netNames[x]).ToString());
    }
   sw.Close();
}

Compilazione del codice

In questo esempio sono richiesti riferimenti ai seguenti spazi dei nomi:

Vedere anche

Concetti

Informazioni sui file di log

Altre risorse

Prestazioni e diagnostica in .NET Compact Framework