2010-03-29 5 views
12

Czy ktoś może polecić prosty generator kodu C#. Właśnie szuka czegoś z metod, takich jak:Generator kodu C#

GenClass = CreateNewClass(AccessModifier,Name......) 

GenClass.Add(new Method(AccessModifier,RetType,Name....){[email protected]"....."} 

GenClass.Add(new Property(AccessModifier,Type, Name....) 

........... itp

i po utworzeniu wszystkie Classes \ metod i innych członków nazywamy funkcję generowania kodu (gdzie może specyficzne niektóre parametry)

Czy istnieje taki generator kodu otwartego kodu?

+0

To jest coś niedawno napisany i to także w Nuget: https://www.nuget.org/packages/CsCodeGenerator/. . . . . . . . . Jest open source i można go znaleźć na github: https://github.com/borisdj/CsCodeGenerator – borisdj

Odpowiedz

12
+0

CodeDOM jest zbyt ciężki i trudny do studiowania.Szukam czegoś prostszego i lekkiego – Neir0

+3

@ Neir0: To jest tak proste, jak to tylko możliwe, jestem zaskoczony tym, czego szukasz, jeśli nazwałbyś to zbyt trudnym. –

+2

Jeśli potrzebujesz nieco lżejszej składni, którą wysuwa twoje pytanie, proponuję napisać kilka bardzo prostych metod rozszerzenia na surowym CodeDOM. Łatwo jest stworzyć ładną, płynną API przy użyciu tej techniki. – GarethJ

0

Jeśli chcesz mieć możliwość generowania klasy, biorąc pod uwagę jakiś łańcuch arbitrażowy zawierający kod C#, potrzebujesz kompilatora C#. W tej chwili struktura .Net nie jest dostarczana z kompilatorem, do którego można przekazać fragmenty kodu C# i odzyskać skompilowany kod. Jeśli masz bardziej konkretne potrzeby, powinieneś dokładnie określić, co chcesz zrobić.

+0

@Gabe: dlaczego nie ma kompilatora w ramach? Spójrz na: http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx – Oliver

+0

Piszę narzędzie, które pomaga mi zautomatyzować typowe codzienne zadania. – Neir0

+0

@Oliver Myślę, że kompilator nie jest częścią struktury. jest to program zewnętrzny (csc.exe) zamiast na przykład kompilatora C# w mono. – Neir0

6

T4 or Text Template Transformation Toolkit może warto przeanalizować.

Inną opcją jest stworzenie własnego prostego generatora, który zawiera funkcjonalność bardziej pasującą do sytuacji niż CodeDOM. W ostatnim projekcie generowania kodu właśnie to zrobiłem, jednak zamknąłem generowanie kodu, aby umożliwić późniejsze przejście do CodeDOM.

6

Możesz chcieć rzucić okiem na kod csscript, który bazuje na CodeDOM.

Pozwala pisać takie rzeczy jak:

var PrintSum = CSScript.LoadMethod(
     @"public static void PrintSum(int a, int b) 
      { 
       Console.WriteLine((a+b)); 
      }") 
      .GetStaticMethod(); 
PrintSum(1, 2); 

Koniecznie przeczytaj ten dokument, to dość szczegółowe i przekonasz się, można zrobić o wiele więcej niż to, co po prostu skopiowane wcześniej.

+1

Dzięki. Ale to narzędzie nie pomaga w generowaniu kodu – Neir0

0

Ponieważ jawnie wyszukujesz generator kodu źródłowego, sugeruję MyGeneration. Innym, opartym na szablonie podejściem (którego nie szukasz, ponieważ chcesz mieć składnię "GenClass.Add ...." zamiast szablonów) byłoby Codesmith Tools to naprawdę potężne, ale zamknięte źródło.