Roslyn Kompilator .NET : csc.exe i pierwsze rozszerzenie fix

Kompilatory C# i Visual Basic były napisane w C++. Co jest logiczne. Bo C# i Visual Basic były nowymi językami. Nie możesz napisać kompilatora nowego języka w samym języku, który dopiero się tworzy.

Wybór ten jednak stworzył pewien problem.  Ekipa pracująca nad językiem C# musiała też znać C++.

Aby dodać nową funkcjonalność języka C# lub Visual Basic trzeba było się mocno wysilić.

Kompilatory nie mogły używać swojego języka.

Syntax TreeCzęść NR.2

W poprzednim wpisie omówiłem w skrócie kompilator Roslyn i to jakie problemy on rozwiązuje.

W poprzednim wpisie też napisaliśmy proste rozszerzenie do Visual Studio, które korzysta z kompilatora Roslyn.

Zanim jednak zaczniemy zabawę na całego z każdym API kompilatora Roslyn, trzeba zacząć od podstaw. Taką podstawą jest API Syntax Trees .

EmitCzęść NR.3

Wewnątrz kompilatora Roslyn oczywiście istnieją klasy, które na podstawie podanego kodu potrafią utworzyć biblioteki.

Są one znakomitą alternatywą dla System.Reflection.Emity  i CodeDOM.

Generowanie kodu jeszcze nie było takie łatwe.

Klasy kompilujące potrafią także bardzo szczegółowo poinformować użytkownika, dlaczego dany kod się nie skompilował.

SemanticCzęść NR.4

Znając już Syntax Tree API oraz API kompilacyjne powstaje pytanie, jak można uzyskać pewne semantyczne informacje na temat kodu, używając obu API.

Przykładowo chcę uzyskać informację, czy podane wyrażenie wewnątrz metody jest wyrażeniem stałym. Jeśli nim nie jest, to zapewne jest ono powiązane z działaniem specyficznej metody operacyjnej jak znak “dodawania”.

WorkspaceCzęść NR.5

Czym jest Workspace API?

Co to jest Workspace?

Workspace reprezentuje solucje w Visual Studio. Klasy więc z tego api będą modelowały układ danej solucji.

Oczywiście rola tych klas nie kończy się tutaj. Przy użyciu tych klas możemy dodawać referencje do projektów i usuwać pliki.

AddDocumentCzęść NR.6Rolsyn API umożliwia z poziomu C# na kompilowanie kodu. Roslyn także zawiera klasy, które potrafią odwzorowywać projekty w solucji tak w Visual Studio.

W poprzednim wpisie opisałem jak użyć Workspace API, ale pracując z tymi klasami zauważyłem, że wiele rzeczy po prostu nie działa.

Po pierwsze wiele rzeczy obecnie nie jest wspieranych w tym API mimo iż metody istnieją.