Michael Niethammers Blog

18.7.2008

Visual Studio Debugger – erweiterte Möglichkeiten

Abgelegt unter: C#, Visual Studio — wmn @ 16:04

Der Debugger im Studio ermöglicht uns erheblich mehr als bei vielen Kollegen bekannt ist. Über die Verwendung von sogenannten “Attributen” kann man im Quellcode das verhalten des Debuggers steuern. Nähere Informationen dazu gibt’s in zahlreichen Foren.

Hier aber mal ganz kurz ein Paar Anregungen:

Attribute



Außerdem kann man die Diagnosefunktionen vom Studio noch erheblich erweitern. Dies hilft z.B. bei der Suche nach Problemen mit der Datenbindung insbesondere innerhalb von WPF-Masken erheblich. So geht’s:

Im config-file der Anwendung fügt man folgende Zeilen ein, um sogenannte Listeners zu definieren:

<system.diagnostics>

<sources>

<source name=”System.Windows.Data” switchName=”SourceSwitch” >

<listeners>

<add name=”textListener” />

</listeners>

</source>

<source name=”System.Windows.DependencyProperty” switchName=”SourceSwitch” >

<listeners>

<add name=”textListener” />

</listeners>

</source>

<source name=”System.Windows.Freezable” switchName=”SourceSwitch” >

<listeners>

<add name=”textListener” />

</listeners>

</source>

<source name=”System.Windows.RoutedEvent” switchName=”SourceSwitch” >

<listeners>

<add name=”textListener” />

</listeners>

</source>

<!–

<source name=”System.Windows.Media.Animation” switchName=”SourceSwitch” >

<listeners>

<add name=”textListener” />

</listeners>

</source>

–>

<source name=”System.Windows.NameScope” switchName=”SourceSwitch” >

<listeners>

<add name=”textListener” />

</listeners>

</source>

<source name=”System.Windows.ResourceDictionary” switchName=”SourceSwitch” >

<listeners>

<add name=”textListener” />

</listeners>

</source>

<source name=”System.Windows.Markup” switchName=”SourceSwitch” >

<listeners>

<add name=”textListener” />

</listeners>

</source>

<!–

<source name=”System.Windows.Documents” switchName=”SourceSwitch” >

<listeners>

<add name=”textListener” />

</listeners>

</source>

–>

</sources>

<switches>

<add name=”SourceSwitch” value=”All” />

<!–add name=”SourceSwitch” value=”Off” –>

<!–add name=”SourceSwitch” value=”Verbose” –>

<!–add name=”SourceSwitch” value=”Warning” –>

<!–add name=”SourceSwitch” value=”Activity” –>

</switches>

<sharedListeners>

<!– This listener sends output to the console –>

<add name=”console”

type=”System.Diagnostics.ConsoleTraceListener”

initializeData=”false”/>

<!– This listener sends output to an Xml file named AvTrace.xml –>

<add name=”xmlListener”

type=”System.Diagnostics.XmlWriterTraceListener”

traceOutputOptions=”None”

initializeData=”AvTrace.xml” />

<!– This listener sends output to a file named AvTrace.txt –>

<add name=”textListener”

type=”System.Diagnostics.TextWriterTraceListener”

initializeData=”AvTrace.txt” />

</sharedListeners>

<trace autoflush=”true” indentsize=”4″></trace>

</system.diagnostics>

Über den Block <switches> kann man sehr genau entscheiden in welchen Bereichen die Listeners aktiviert werden sollen. Im Quellcode kann man dann die erweiterten Diagnosen über folgenden Code aktivieren:

// tracing fürs binding aktivieren

PresentationTraceSources.Refresh();

PresentationTraceSources.RoutedEventSource.Listeners.Add(new DefaultTraceListener());

PresentationTraceSources.RoutedEventSource.Switch.Level = SourceLevels.All;

WICHTIG: Ausgabe erfolgt im Verzeichnis der EXE in dem Textfile <AvTrace.txt> - kann man im Config File natürlich ändern!


10.7.2008

Jetzt wird gebloggt!

Abgelegt unter: Sonstiges — wmn @ 08:21

Nachdem ich schon lange alles was ich so an wichtigen Informationen finde in OneNote aufhebe. Will ich in der kommenden Zeit mal versuchen diese Informationen in Form eines Blogs zu archivieren. Mein Hauptziel ist es die Informationen für mich zu dokumentieren und für die Kollegen ein einfaches Medium zu schaffen, wo sie auf diese Infos zugreifen können.

Ich bin mal gespannt, wie sich dieses neue Medium bewährt.

Für Anregungen Ideen und Beiträge bin ich immer gerne zu haben…..

4.7.2008

mit C# auf Word zugreifen

Abgelegt unter: C# — admin @ 16:03


// using System.Reflection; nicht vergessen!

 

/// <summary>

/// Wandelt ein bestimmtes Word-Dokument in HTML um.

/// </summary>

/// <param name=”source”>Quelldokument</param>

/// <param name=”destination”>Zieldokument</param>

public static void ConvertWord2Html(string source, string destination) {

    // Konstante für Word-HTML-Ausgabeformat

    const int WORD_HTML_FORMAT=8;                 

 

    // COM-Metadaten von Word.Application aus der Registry laden

    Type wordApplication=Type.GetTypeFromProgID(”Word.Application”);

 

    // Neue Instanz von Word erzeugen

    object word = Activator.CreateInstance(wordApplication);

 

    // Word sichtbar machen (Visible=true)

    //wordApplication.InvokeMember(”Visible”,BindingFlags.IgnoreCase | BindingFlags.SetProperty | BindingFlags.Public,null,word,new object[1]{true});

 

    // Dokumentauflistung abrufen

    object documents = wordApplication.InvokeMember(”Documents”, BindingFlags.IgnoreCase | BindingFlags.GetProperty | BindingFlags.Public, null, word, new object[0]);

 

    // COM-Metadaten von Word.Documents ermitteln

    Type wordDocuments = documents.GetType();

 

    // Quelldokument laden

    object document=wordDocuments.InvokeMember(”Open”, BindingFlags.IgnoreCase | BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.OptionalParamBinding, null, documents, new object[1] {source});

 

     // COM-Metadaten von Word.Document ermitteln

    Type wordDocument = document.GetType();

 

    // HTML erzeugen

    wordDocument.InvokeMember(”SaveAs”, BindingFlags.IgnoreCase | BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.OptionalParamBinding, null, document, new object[2] {destination,WORD_HTML_FORMAT});

 

    // Word schließen

    wordApplication.InvokeMember(”Quit”, BindingFlags.IgnoreCase | BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.OptionalParamBinding, null, word, new object[0]); }

läuft stressfrei mit WordPress ( WordPress.de )