假设一个Visual Studio项目ProjectA.SampleClass
有一个包含在#if DEBUG ... #endif
符号内的方法,即该方法只包含在Debug版本中:
public class SampleClass
{
...
#if DEBUG
public void ConditionalMethod() { ... }
#endif
}
另一个项目ProjectB
调用SampleClass.ConditionalMethod()
,但显然只有在ProjectA定义了DEBUG常量时它才能成功。
如果ProjectB
定义了DEBUG常量,是否有一种内置的方法可以在编译时检入ProjectA
?像这样:
#if ProjectA.DEBUG
ProjectA.SampleClass.ConditionalMethod();
#endif
我可以想到一些模糊的AOP方法,通过编辑后的IL编辑来实现这样的目标,但这并不是很理想。
答案 0 :(得分:0)
尝试使用新的构建配置。右键单击解决方案,然后选择Configuration Manager。从这里定义新配置。之后,请确保选择了新配置,您将看到每个项目的“配置”列如何设置为新配置。如果不是 - 选择它。然后为每个项目定义所需的符号。
答案 1 :(得分:0)
更好的设计可能是以任何一种方式定义方法,并且其中一种方法只是一种无操作:
#if DEBUG
public void ConditionalMethod() { ... }
#else
public void ConditionalMethod() {} // Method does nothing
#endif
(当然,你也可以简单地将#if /#endif放在方法的主体周围。)
然后,Project B可以调用该方法,其行为会根据项目A的编译方式而改变。