私はjsの生成をいじっていましたが、Reflectionがこれに適したツールであることがわかりました。私は基本的に、メタデータが由来するプロジェクトの bin フォルダーにジェネレーターを向けています。必要なすべてのアセンブリを読み込む際に問題が発生する可能性があり、bin フォルダー内のアセンブリのバージョンと、ジェネレーター プロジェクトが参照する同じアセンブリのバージョンに関する警告があります。しかし、これらすべてを乗り越えれば (私は最小限の困難で済みました)、Reflection ははるかに使いやすく、信頼性が高くなります。
Roslyn を使用すると、基本的には c# を解析するだけです。Roslyn はこれを非常にうまく行っていますが、Reflection から切り替えるのをためらっています。リフレクションを使用すると、メタデータをより確実に取得できます。
コントローラー クラスを装飾する RoutePrefixAttribute の Prefix プロパティが必要だとします。C# を解析している場合は、[RoutePrefix("stringliteral")] または [RoutePrefix(constantString)] がある可能性があります。したがって、それがリテラルか定数式かを心配し、次に定数式の値を取得する方法を見つけ、属性にパラメーターを渡すさまざまな方法をすべて心配する必要があります (たとえば、これはコードを壊してください: [RoutePrefix(Prefix="literal")]...
リフレクションを使用して実際のランタイム オブジェクトを処理すると、すべてが簡単になります。素敵な RoutePrefixAttribute オブジェクトがあり、routePrefix.Prefix に移動して、プレフィックスの値を確実に取得できます。
これは、Reflection を使った作業がいかに簡単かを示す一例にすぎません。これは、C# オブジェクトのセットからタイプ セーフな方法でメタデータを収集することと、C# コードからデータをスクレイピングすることの違いです。ただし、非常に優れたスクレイピング ツールを使用します。
編集:この回答を書いて以来、私は弾丸を噛んでRoslynに切り替えました。コツをつかめばかなり強力です。1 つの大きな利点を見つけました。それは、ビジュアル スタジオ プラグインからワークスペースへの参照を取得し、プラグイン内であらゆる種類の操作を簡単に実行できることです。