2009-06-12 5 views
5

GCCで-Eフラグを使用するのと同様の方法で、C#ソースファイルをコンパイルせずに前処理するユーティリティを知っている人はいますか?私はGCCを使用してみました - それは成功し#ifディレクティブを処理しますが、それはどの#regionディレクティブにチョーク...C#の前処理ツールはありますか?

理想的には、私が評価するあらゆる#ifブロックを削除するためには.csファイル上でツールを実行できるようにしたいのですが

など虚偽、および必要に応じて削除する/ #region、そのままコメントを残すかどうかのフラグのことができるように、 #pragmaディレクティブにコンテキストでこれを置くために、私はの一部(あるいくつかのソースコードを公開することができるようにしたいです多くの)大きなプロジェクトに関連する部分だけを削除します。 - これは、大規模プロジェクトのソースコードのサブセットのみを公開について、純粋である

#if (SUBPROJECT) 
namespace SubProject 
#else 
namespace CompleteProject 
#endif 
{ 
    public class SomeClass() 
    { 
#if (!SUBPROJECT) 
    // This might call a method contained in an assembly that potentially 
    // won't be available to the sub-project, or maybe a method that hooks 
    // into a C library via P/Invoke... 
    string result = CallSomeCleverMethod(); 
#else 
    // This might call a method that performs a simplified version of the 
    // above, but does so without the above's assembly or P/Invoke 
    // dependencies... 
    string result = CallSomeSimpleMethod(); 
#endif 
    } 
} 

私がやろうとしていないよ覚えておいてください、ここで構築します。例として、次のようになり、コードの塊があります。

アイデア/助けていただければ幸いです。

答えて

3

gcc経由ではなくGNU Cプリプロセッサ(cpp)を使用すると、出力をより詳細に制御できます。これを使用して、私は

...適切な方法でソースファイルを処理することができました

ここでは例です:

cpp -C -P -DSUBPROJECT Input.cs Output.cs 

私は似た何かをするには、Visual Studioで提供されるC/C++コンパイラを取得しようとしましたしかし、しばらく後にあきらめて...

+0

実行ファイルはどこで手に入りますか? – NightOwl888

+0

これはGNUコンパイラコレクションの一部です。OS XやLinuxを実行している場合はおそらく既にインストールされています。 Windowsを実行している場合、おそらくMinGWが必要なものです。 –

+0

http://mcpp.sourceforge.net/download.htmlで動作するものが見つかりましたが、実行可能ファイルはcppではなくmccpです。 – NightOwl888

1

もっと簡単に、もっとイディオム的にC#して、インターフェイスを作成し、それらのインターフェイスの実装が異なるかもしれませんか? 1つのセットをライブラリとしてパッケージ化して再配布できますか?

+0

私は実際のクラス/名前空間の名前、メタデータ(カスタム属性など)を処理できる必要があります - 質問の名前空間の例を参照してください。私はまた、他の方法で必要とされていない実装の複雑さを追加したくありません。 –

+2

あなたは上記のコードがすでに複雑だとは思わない?私はまだあなたがC++の考え方から実際に来ていると思っていますし、C#が提供するいくつかのツールが欠落していると思います。 –

2

私はC#用のプリプロセッサを知っていないので、ソースコードの一部をビルドせずにエクスポートすることができます。

ただし、コード生成テンプレートを使用することで同じ効果を得ることができます。プリプロセッサディレクティブを適切なテンプレートに相当するディレクティブに変更するだけです。

Visual Studio 2008には、T4というコード生成ツールが組み込まれています。 CodesmithToolsまたは出力への無料MyGeneration.Net

+1

これは有望だと思う - 私はT4について考えなかった - それを調べて、すぐに報告するだろう。 –

2

私はCSCまたはMSC(モノコンパイラ)のためのいずれかのフラグがあることを信じていない前処理されたファイルのような他のサードパーティのオプションがあります。

これを実行しなければならない場合は、小さなサブセットだったので、Reflectorを使用してC#に逆コンパイルしてファイルをエクスポートします。たくさんのファイルがある場合、FileGenerator for Reflectorと呼ばれるReflector Add-Inがあります。

残念ながら、これはコードベースの真のコピーではありません。すべてのコードを再フォーマットするとすべてのコメントが失われます。

関連する問題