2009-10-03 19 views

Odpowiedz

6

To nie jest bezpośrednio można zrobić z ram rdzeń .NET. Trzeba użyć osobie trzeciej lub dodatek na narzędzia, na przykład:

+0

Ale dlaczego? Czy kompilator C# nie używa CodeDOM? – ulrichb

+4

Nie, nie ma. CodeDom jest przeznaczony dla programistów zarządzanych aplikacji; csc.exe to niezarządzany kod, który nie ma zależności .NET. – bobbymcr

-2

Może być tym, czego szukasz.

+2

NIE. Nie sądzę, że CSharpCodeProvider może zrobić to, co opisałem powyżej. – ulrichb

0

Spróbuj Mono.Cecil

+1

Ale nie zajmuje się kodem źródłowym. Czy to prawda? –

+0

Prawidłowo, dotyczy tylko IL. Możesz użyć funkcji NRefactory (która jest parserem dla C# i VB.NET, również z projektu #Develop). –

0

Jeśli chcesz zdolność do analizowania i przeprowadzać dowolne analizy i transformacje kodu źródłowego C# (lub wielu innych języków), sprawdź nasz The DMS Software Reengineering Toolkit.

DMS ma pełny front-end C#, buduje kompletne abstrakcyjne drzewa składni dla sparsowanego kodu (ale nie CodeDom), zapewnia pełny proceduralny interfejs API do chodzenia/sprawdzania/zmieniania AST. Po zrewidowaniu drzewa DMS może zregenerować kod źródłowy odpowiadający zmodyfikowanemu drzewu, albo w trybie wierności, w którym próbuje zachować oryginalny odstęp, albo w trybie śladu, w którym stosuje styl śladu, który można całkowicie kontrolować. Komentarze są prawidłowo przechowywane w źródle zregenerowanym.

Dodatkowo, DMS zapewnia dopasowanie i transformację wzorców na poziomie źródła (np. Można napisać "x = x + 1 ==> x ++" zamiast kodować wszystkie pliki do obejrzenia w celu obejrzenia, zhackować drzewo do zmiany.) Aby dowiedzieć się, dlaczego jest to o wiele mniej pracy, zobacz: writeup on program transformations.

5

To jest naprawdę stare pytanie, ale warto zauważyć, że zaakceptowana odpowiedź nie ma już zastosowania. Ostatni projekt Microsoftu Roslyn Microsoftu ma na celu ujawnienie całej wiedzy zdobywanej przez kompilator o twojej bazie kodowej w procesie jej statycznej analizy oraz udostępnienie wszystkich tych informacji za pośrednictwem zarządzanych interfejsów API w celu ich wykorzystania. Jest dostępny zarówno dla VB, jak i C#.

Ponieważ chcesz spożywać statycznej analizy informacji, musisz pakiet Microsoft.CodeAnalysis Nuget (rzeczy trzeba dla C# jest pod nazw Microsoft.CodeAnalysis.CSharp) i jakiś czas na stronie w docs samples and walkthroughs.