Mam sytuację, w której jedna część mojego kodu jest generowana przez CodeExpressions
, a druga przez samego użytkownika (jak w: użytkownik po prostu pisze swój kod jak zwykle, który bym wtedy wziął i dodał do mojego zespołu, gdy kompilował) .Czy możemy skonstruować zespół zarówno z CodeExpressions, jak i literalnego kodu źródłowego w tym samym czasie?
Czy można wygenerować zestaw złożony z obu tych elementów? Zastrzeżenie: te dwa podejścia będą zawierać klasy partial
, więc muszą znajdować się w tym samym zespole.
Innym podejściem, które miałem na myśli, było prawdopodobnie przetłumaczenie obu na reprezentację ciągów, a następnie wygenerowanie złożenia z tego ciągu, ale wątpię, czy mogę uzyskać kod źródłowy z typu wygenerowanego przez użytkownika (podczas kompilacji czas).
Pracując nad tym pomysłem, mógłbym napisać kod wygenerowany przez CodeExpressions do pliku tekstowego i połączyć go z plikami .cs
. Oś czasu będzie wyglądać następująco:
- Użytkownik nie napisał jego zajęcia
- CodeDom drzewo jest ustawiony programowo
- Użytkownik buduje projekt
- CodeDom generuje źródło do pliku tekstowego
- program odczytuje zawartość użytkownika -defined
.cs
file - Program odczytuje wygenerowany plik tekstowy
- Program łączy te dwa
- Program tworzy nowy
.dll
z połączonych kodu źródłowego
mogłem pominąć (redundantne) etapy pisania i czytania mojego wygenerowanym źródła CodeDom do pliku tekstowego i po prostu zapisać go w pamięci, a także, oczywiście. W rzeczywistości najłatwiej byłoby użyć wstępnie przetworzonych szablonów T4 i załadować wyniki tych szablonów do pamięci i skompilować złożenie z tego łańcucha.
Jak widać, jest bardzo brudny, ale teraz wygląda na najbardziej wykonalny. Czy przejrzałem jakieś opcje, które mogłyby to ułatwić?
Tworzę biblioteki, które będą tworzyć zespół z klas, które są zdefiniowane przez użytkownika. Sposób ten działa w następującej kolejności:
- Użytkownik odwołuje moją bibliotekę w swoim projekcie
- użytkownik tworzy nowy
TinyTypeSetup
instancji - Użytkownik dodaje definicji typu małe, aby je
- użytkownik uruchamia programowi
- Program generuje zestaw z podanych typów za pomocą CodeDom
Co próbuję teraz dodać to możliwość Aby użytkownik mógł tworzyć własne pliki źródłowe i dodawać te pliki natychmiast do zespołu, który zostanie wygenerowany. Umożliwiłoby to użytkownikowi wybranie klas częściowych za pomocą własnych metod, a także tych, które sam generuję.
Jestem zdezorientowany. Czy mógłbyś bardziej szczegółowo wyjaśnić, dlaczego nie możesz po prostu skompilować wszystkiego jako łańcuchów (lub typów CodeDOM, używając ['CodeSnippetCompileUnit'] (http://msdn.microsoft.com/en-us/library/system.codedom.codesnippetcompileunit. aspx)) w tym samym czasie? – svick
@svick: teoretycznie mogłem, ale to by znaczyło, że sam muszę złożyć tę strunę. Generowanie łańcucha za pomocą kodu źródłowego będzie bardzo podatne na błędy literowe i raczej brzydkie, aby zaśmiecić moje źródło serią ciągów znaków. –
@svick: Dodałem pewne informacje podstawowe –