我有一个内部 API,我希望其他人在他们的项目中将其作为已编译的 DLL 引用。当它是引用的独立项目时,我使用条件编译(#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
}
虽然可能有一些语法糖允许我以另一种方式在相同类型的两个属性之间切换,但我不知道。有任何想法吗?
另一种方法是引用整个项目而不是程序集,但如果可以的话,我宁愿坚持只引用已编译的 DLL。如果需要的话,我也完全愿意采用一种全新的方法来解决问题。