14

背景: カスタム VB コンパイラを作成し、「元の」コンパイラを拡張して、カスタム コンパイル時の属性を処理したいと考えています。

質問: カスタム コンパイラを作成し、標準のコマンド ライン インターフェイスを介して VB コードをコンパイルできる実行可能ファイルを取得した後、このコンパイラを Visual Studio IDE に統合するにはどうすればよいですか? (「コンパイル」または「ビルド」を押すと、デフォルトのコンパイラの代わりに私のコンパイラが使用されるようになります)。

編集:(間違っている場合は修正してください)

ここでの反応から、この質問は少し衝撃的であることがわかりました。そのため、私のニーズと背景についてさらに説明します。.NET は、属性と呼ばれる優れたメカニズムを提供します。私が理解している限り、属性を作成すると、属性付きの要素 (アセンブリ、モジュール、クラス、メソッドなど) に意図した動作が適用されます。属性を反映する必要があります。したがって、ここでの本当の秘訣は、適切な場所で行動を反映して適用することです。

シリアライゼーションを例に取りましょう: クラスを Serializable 属性で装飾します。次に、クラスのインスタンスをフォーマッタの Serialize メソッドに渡します。フォーマッタはインスタンスを反映し、Serializable 属性があるかどうかを確認し、それに応じて動作します。

ここで、Synchronization、Flags、Obsolete、および CLSCompliant 属性を調べると、本当の問題は次のとおりです。誰がそれらを反映しているのか? 少なくとも場合によっては、それはコンパイラ (および/または IDE) でなければなりません。したがって、特定の消費者に関係なく要素の動作を変更するカスタム属性を作成したい場合は、コンパイル時にそれらを反映するようにコンパイラを拡張する必要があるようです。

もちろん、これらは私の個人的な洞察ではありません。書籍「Applied .NET Attributes」には、カスタム属性を作成する完全な例と、コンパイル時にその属性を反映するためのカスタム C# コンパイラが記載されています (この例は、「Java スタイルを実装するために使用されます。チェックされた例外」)。

4

2 に答える 2

4

「 BuildAction プロパティ」と「 CustomToolプロパティ」を確認してください。

数年前、カスタム コンパイラの作成、登録、およびこれらのプロパティの設定に関する優れた記事を読みました。今は記事を見つけることができませんが、これで始められるはずです。

于 2010-04-13T11:02:42.453 に答える
2

http://msdn.microsoft.com/en-us/library/ms171452.aspxで「MSBuildの概要」を確認してください。VisualStudioプロジェクトはMSBuildプロジェクトです。あなたがしなければならないのは、いくつかの小さな変更を加えることだけだと思います。私はコンパイラーのためにそれをしていませんが、コンパイル後にILMergeでそれをしました、そしてそれは素晴らしい働きをします。シームレスで、マージされたアセンブリをデバッグすることも可能です。

于 2010-04-13T11:44:34.270 に答える