質問

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

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

編集:(間違っていたら訂正してください)

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

シリアル化を例に挙げてみましょう。Serializable 属性を使用してクラスを修飾します。次に、クラスのインスタンスをフォーマッタの Serialize メソッドに渡します。フォーマッタはインスタンスを反映し、インスタンスに Serializable 属性があるかどうかを確認し、それに応じて動作します。

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

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

役に立ちましたか?

解決

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

他のヒント

チェックアウト "BuildAction プロパティ" そして "CustomTool プロパティ".

数年前、カスタム コンパイラーの作成、登録、およびこれらのプロパティの設定に関する優れた記事を読みました。現在記事が見つかりませんが、これを参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top