Я изучаю System.CodeDom
пространство имен для независимого от языка (по крайней мере, в определенных пределах) генерации исходного кода, и у меня есть нашел некоторую информацию, препятствующую использованию CodeDom
.
Я думаю, что некоторые из пропусков, описанных в этот ранний blogpost, были исправлены к настоящему времени и тот факт, что CodeDom
, похоже, не дает возможности создать инструкцию switch
, тем не менее, позволяет делать менее результативные? - обходные пути без угашения публичного интерфейса сгенерированных типов. То же самое относится к автоматическим свойствам С# и инициализаторам коллекции.
Однако другие пропуски не могут быть действительно обработаны, например невозможность создания финализаторов, невозможность объявить расширение методы или , не имеющие прямой поддержки общих ограничений ссылочного типа.
Обратите внимание, что предлагаемые решения с CodeSnippetTypeMember
или инъекции литералов с исходными текстами каким-либо другим способом не удовлетворяют, поскольку они не являются языковыми - независимо - тем самым удаляя всю точку использования CodeDom
, а не String.Format
с буквальными фрагментами кода.
Наконец, в этом вопросе SO даже предлагается , что "CodeDom является провалом и что деревья выражений (или, скорее," Statement "Trees) - это путь вперед" , - хотя без объяснения того, как реально получить какой-либо исходный код из дерева выражений (помимо ограничения, которое не могут быть объявлены с деревьями выражений.
Является ли CodeDom по-прежнему методом выбора генерировать исходный код или текущая BCL предлагает какую-либо неясную замену с именем, о котором я не думал?