コンパイルされたDLLとして他の人がプロジェクトで参照してほしい内部APIがあります。参照されるスタンドアロンプロジェクトの場合、条件付きコンパイル(#ifステートメント)を使用して、コンパイルシンボルに応じて主要なWebサービスクラスの動作を切り替えます。問題は、アセンブリが生成されると、最初にコンパイルされたときのコンパイルシンボルにロックされているように見えることです。たとえば、このアセンブリがDEBUGでコンパイルされ、別のプロジェクトによって参照されている場合、他のプロジェクトがRELEASEとしてビルドされた場合でも、アセンブリは再コンパイルの必要がないため、DEBUGにあるかのように動作します。それは理にかなっています、ただいくつかの背景を与えるだけです。
今、私はそれを回避しようとしています。これにより、app / web構成ファイルをスキャンしてスイッチを探すなど、他の方法でアセンブリの動作を切り替えることができます。問題は、私が切り替えていたアセンブリのコードの一部がメソッドの属性であるということです。たとえば、次のようになります。
#if PRODUCTION
[SoapDocumentMethodAttribute("https://prodServer/Service_Test", RequestNamespace = "https://prodServer", ResponseNamespace = "https://prodServer")]
#else
[SoapDocumentMethodAttribute("https://devServer/Service_Test", RequestNamespace = "https://devServer", ResponseNamespace = "https://devServer")]
#endif
public string Service_Test()
{
// test service
}
同じタイプの2つの属性を別の方法で切り替えることができる構文糖衣があるかもしれませんが、私にはわかりません。何か案は?
別の方法は、アセンブリではなくプロジェクト全体を参照することですが、可能であれば、コンパイルされたDLLを参照するだけにしておきたいと思います。それが必要な場合、私は問題を解決するためのまったく新しいアプローチにも完全にオープンです。