Co chcę zrobić, to odczytać kod C#, przeanalizować go, wstawić niektóre wywołania metod i skompilować je w końcu.Jak programowo analizować i modyfikować kod C#
Czy można konwertować kod źródłowy C# (listę łańcuchów) na obiekty CodeDOM?
Co chcę zrobić, to odczytać kod C#, przeanalizować go, wstawić niektóre wywołania metod i skompilować je w końcu.Jak programowo analizować i modyfikować kod C#
Czy można konwertować kod źródłowy C# (listę łańcuchów) na obiekty CodeDOM?
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:
Wypróbuj Linq over C#. To jest wspaniałe.
Może być tym, czego szukasz.
NIE. Nie sądzę, że CSharpCodeProvider może zrobić to, co opisałem powyżej. – ulrichb
Spróbuj Mono.Cecil
Ale nie zajmuje się kodem źródłowym. Czy to prawda? –
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). –
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.
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.
Ale dlaczego? Czy kompilator C# nie używa CodeDOM? – ulrichb
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