2009-10-03 8 views

Antwort

6

Es ist nicht direkt möglich ist, dies mit dem Kern .NET Framework zu tun. Sie benötigen Dritte oder Add-on-Tools zu verwenden, zum Beispiel:

+0

Aber warum? Verwendet der C# -Compiler kein CodeDOM? – ulrichb

+4

Nein, tut es nicht. CodeDom ist für verwaltete Anwendungsentwickler; csc.exe ist nicht gemanagter Code, der keine .NET-Abhängigkeiten hat. – bobbymcr

-2

Die CSharpCodeProvider könnte das sein, was Sie suchen.

+2

NR. Ich glaube nicht, dass CSharpCodeProvider das tun kann, was ich oben beschrieben habe. – ulrichb

0

Versuchen Mono.Cecil

+1

Aber es geht nicht mit Quellcode. Oder tut es? –

+0

Richtig, es handelt sich nur um IL. Sie könnten NRefactory (einen Parser für C# und VB.NET, auch aus dem #Develop-Projekt) verwenden. –

0

Wenn Sie die Fähigkeit zu analysieren , und führen Sie beliebige Analysen und Transformationen auf C# Quellcode (oder eine Vielzahl von anderen Sprachen), finden Sie in unserem The DMS Software Reengineering Toolkit.

DMS verfügt über ein vollständiges C# -Protokoll, erstellt vollständige abstrakte Syntaxbäume für geparsten Code (aber kein CodeDom), bietet eine vollständige prozedurale API zum Gehen/Überprüfen/Ändern der ASTs. Nach der Überarbeitung des Baums kann DMS den dem geänderten Baum entsprechenden Quellcode erneut generieren, entweder im Wiedergabe-Modus, in dem er versucht, den ursprünglichen Abstand beizubehalten, oder im Modus "Schöndruck", bei dem er einen Schöndruckstil anwendet, den Sie vollständig steuern können. Kommentare bleiben in der neu generierten Quelle erhalten.

Darüber hinaus bietet DMS Pattern-Matching und Transformation auf Source-Level-Ebene (zB können Sie "x = x + 1 ==> x ++" schreiben anstatt den gesamten zu testenden Baum zu verifizieren, hacken Sie den Baum zu ändern.) Siehe writeup on program transformations, um zu verstehen, warum das viel weniger Arbeit ist ..

5

Dies ist eine wirklich alte Frage, aber es ist erwähnenswert, dass die angenommene Antwort nicht länger gilt. Microsofts jüngstes Projekt Roslyn zielt explizit darauf ab, das gesamte Wissen, das der Compiler über Ihre Codebasis erhält, im Prozess der statischen Analyse zu offenbaren und all diese Informationen durch verwaltete APIs für Sie nutzbar zu machen. Es ist für VB und C# verfügbar.

Da Sie statische Analyseinformationen konsumieren wollen, müssen Sie das Microsoft.CodeAnalysis NuGet Paket (das Material, das Sie für C# müssen, ist unter dem Microsoft.CodeAnalysis.CSharp Namespace) und einige Zeit an der samples and walkthroughs Seite in der Dokumentation.

Verwandte Themen