2

フレームワークの残りの部分がそのデータを取得するために依存する Web サービス クラスがありますが、Web サービス クラスには、その環境に応じて異なるメソッド属性が必要です。たとえば...

[SoapDocumentMethodAttribute("https://example",...)]
public string Test()
{
    //doSomething
}

「 https://example」を参照してください。環境に応じて変更する必要があります。私の知る限り、実行時にその文字列を動的にすることはできません。そのようにコンパイルする必要があります。そのため、この Web サービス用に複数の CS ファイルがあり、それらに異なる属性 URL がハードコーディングされ、MSBuild がプリコンパイル時にそれらを交換するようにしようとしています。したがって、テスト用のベース "Service.cs"、運用環境用の "Service.cs.production" などがあります。

  • これはこれを行うための最良の方法ですか、それとも環境を独自に処理する 1 つの CS を持つことができる何かが欠けていますか?
  • 同じクラス名を保持し、IntelliSense があいまいであると考えないようにするために、ファイル拡張子 ("Service.cs" と "Service.cs.production") をいじっています。それが唯一の方法ですか?
  • 上記のすべてが問題ないことを考慮し、「Production」構成に対してコンパイルしています.Service.csの代わりにService.cs.productionをコンパイルすると、すべてがうまくいきますか?

ありがとう!

4

2 に答える 2

4

条件付きコメントを使用できますか?

#if TESTING
        [SoapDocumentMethodAttribute(something)]
#else
        [SoapDocumentMethodAttribute(someotherthing)]
#endif

テスト構成では、定数を次のように定義します。

<DefineConstants>TESTING</DefineConstants>
于 2008-11-17T17:06:51.340 に答える
3

定数の定義と #if ディレクティブの使用に関連して、

また、カスタム ビルド タスク -> Target BeforeBuild を作成し、Engine.GlobalEngine.GetLoadedProject("projpath") を Project オブジェクトに使用することもできます。

Project オブジェクトのプロパティをさまざまな環境で必要に応じて操作できるようになりました。

必要に応じて、さまざまな環境用に構成にプラットフォームを追加することを検討してください。

これはあなたが探している答えではないかもしれませんが、プロジェクト環境に基づいてビルドをフォークしたい場合に考慮すべきことです。

于 2008-11-17T17:13:51.983 に答える