言語に依存しない(少なくとも特定の範囲内で)ソースコード生成のSystem.CodeDom
名前空間を調べていますが、の使用を思いとどまらせる情報がいくつか見つかりましたCodeDom
。
この初期のブログ投稿で説明されている省略の一部は、これまでに修正されていると思います。ステートメントCodeDom
を作成する方法を提供していないように見えるswitch
という事実は、パフォーマンスの低下を可能にしますか?-生成されたタイプのパブリックインターフェイスを醜くしないでの回避策。同じことが自動C#プロパティとコレクション初期化子にも当てはまります。
ただし、ファイナライザーを作成できない、拡張メソッドを宣言できない、ジェネリック参照型の制約が直接サポートされていないなど、他の省略は実際には回避できません。
CodeSnippetTypeMember
言語に依存しないため、他の方法でリテラルソースコードスニペットを使用または挿入することで提案されたソリューションは満足のいくものではないことに注意してください。これにより、リテラルコードスニペットCodeDom
ではなく使用のポイント全体が削除さString.Format
れます。
最後に、このSOの質問では、「CodeDomは失敗であり、式ツリー(または「ステートメント」ツリー)が前進する」とさえ示唆されていますが、式ツリーから実際にソースコードを取得する方法については説明がありません(クラスは式ツリーで宣言できないという制限のほかに。
CodeDomはまだソースコードを生成するための選択の方法ですか、それとも現在のBCLは、私が思いもよらなかった名前のあいまいな置換を提供しますか?