2

私がやりたいことは、やる価値さえないかもしれませんが、かっこいいと思いました。

したがって、私がやりたいことは、プロジェクトのビルド時に (コンパイル時だけでなく) 実行され、属性や一般的なコード分析などに基づいてクラスに追加するコードを用意することです。私がやりたいことは、動的に生成されたフィールド/プロパティを intellisense で使用できるようにすることですが、実際のソースには表示されません。その理由は、それらを大量に生成したい可能性があり、それらをソースに出力するとすぐに混乱してしまうからです。

そのようなシステムの潜在的な可能性は、ベクトル スウィズリングのようなものです。

生成コードをプラグインするだけのライブラリはありますか? そうでない場合、これにアプローチする最良の方法は何ですか?

4

2 に答える 2

1

これの最も顕著な例は、Microsoft が XAML ファイルに対して行ったものです。ビルド中に、XAML ファイルごとに C# ソース ファイルが作成され、obj/Debugまたはobj/Releaseフォルダーに配置されます。それに加えて.targets、関連するタスクが定義されている MSBuild ファイルは、生成されたファイルが適切な IntelliSense サポートに必要であることを Visual Studio に伝えるように特別に構成されています。 XAML で宣言された項目を、プロジェクトの他の場所の C# コードで使用できるようにします。

これはまさに、ビルド中に ANTLR 文法ファイルのコードを生成するために使用する方法です。ビルド タスク アセンブリとカスタム.targetsファイルを含む完全な例は、
https ://github.com/antlr/antlrcs/tree/master/AntlrBuildTask で確認できます。

Visual Studio の一部のサードパーティ拡張機能は、IntelliSense サポートを独自のコード補完実装に完全に置き換えることに注意してください。これらの拡張機能の一部は、カスタム コード ジェネレーターと連携するために必要な MSBuild IntelliSense 拡張機能をサポートしていないことがわかっています。IntelliSense で問題が発生し、拡張機能がインストールされている場合、拡張機能を削除すると問題が完全に解決することがあります。

于 2013-11-11T00:31:53.513 に答える
0

アプリケーションの実行時にクラス CSharpCodeProvider/ICodeCompiler/CompilerParameters によってコードをコンパイルする必要があります。

于 2013-11-11T00:21:18.573 に答える