0

複数のバージョンで維持する基本ライブラリがあります。別のバージョンで作業する必要があるときはいつでも、SVN の切り替えを行います。

テスト アプリケーション ソリューションの複数のバージョンを持っていないため、バージョンごとに、バージョン固有のコードをテストに含めることができるように、バージョンのシンボルを定義する複数のソリューション/プロジェクト構成を実行できると考えました。

現在、テスト アプリケーション ソリューションには次のビルド構成があります: Debug、Release、DebugV10、ReleaseV10、DebugV15、ReleaseV15。*V10 および *V15 構成では、バージョン固有のテスト コードを持つ 2 つのプロジェクト用に、対応する *V10 および *V15 PROJECT 構成を作成して選択しました (すべてのプロジェクトではなく、ほとんどがソリューションで通常のデバッグ/リリース構成を実行します -Vx構成)。

これらのプロジェクト構成では、対応する条件付きコンパイル シンボル (VERSION10 および VERSION15) を入力しました。

プロジェクトの私のコードでは、次のようになります

#if VERSION10
  // do v1.0 stuff
#elif VERSION15
  // do v1.5 stuff
#else
  // do trunk stuff
#endif

しかし、明らかにVSはシンボルを認識していません。単純な #if DEBUG が機能しなくなった場合でも、すべての DEBUG 定数の定義がすべての Debug* プロジェクト構成でチェックされます。

これは既知のことですか?私はそれについて何ができますか?

4

2 に答える 2

0

C#での条件付きコンパイルは、CおよびC++とは異なります。クラスの情報については、こちらをご覧ください。ConditionalAttribute

例えば:

doDebugOutput();    // unconditionally call the optional code

Conditional["DEBUG"]
void DoDebugOutput()
{
  // do expensive debug-only output here
}
于 2010-11-17T19:33:09.347 に答える
0

あなたが説明するコンセプトはうまく聞こえます。

つまり、コードは次を使用します。

#if VERSION10 ... #endif

そしてプロジェクト構成は定義しますVERSION10

そして、上記のプロジェクト構成を使用するように設定されたソリューション構成がセットアップされます。

これらがすべて正しく設定されている限り、動作すると思います。

#if DEBUG が期待どおりに機能しないという事実は、何かが非常に壊れていることを示唆しています。

可能な限り単純なケースを試して、セットアップ方法を理解していることを確認することをお勧めします。バージョンを区別できる単純なコードを持つ新しい最小限の「hello world」アプリケーションを作成します。

#if VERSION1
  Console.WriteLine("Hello from version 1");
#else
  Console.WriteLine("Hello from version 2");
#endif

次に、プロジェクト構成 (「デバッグ バージョン 1」、「デバッグ バージョン 2」) を作成し、それらをセットアップして (VERSION1 が定義されているものと定義されていないもの)、ビルド時に 2 つの出力を取得できるかどうかを確認します。

次に、上記のプロジェクト構成を使用するソリューション構成を追加し、それらをビルドして、実行時に正しいものが出力されることを確認します。

これが完了すると、より複雑なプロジェクトに適用できる作業システム (これらの要素が互いにどのように関連しているかを理解したもの) が得られます。それらを元に戻すには、プロジェクト/ソリューション構成のほとんどを削除してから、何をすべきかがわかったので、それらを最初から再構築することをお勧めします。多くの場合、これらを最初の原則から再構築する方が、既存の「壊れた構成」を微調整しようとするよりもうまくいきます。セットアップを元に戻します。

于 2010-11-17T22:40:22.403 に答える