如何根据另一个项目中的符号在一个项目中实现条件编译?

时间:2016-03-09 15:40:41

标签: c# .net visual-studio visual-studio-2012 conditional-compilation

假设一个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编辑来实现这样的目标,但这并不是很理想。

2 个答案:

答案 0 :(得分:0)

尝试使用新的构建配置。右键单击解决方案,然后选择Configuration Manager。从这里定义新配置。之后,请确保选择了新配置,您将看到每个项目的“配置”列如何设置为新配置。如果不是 - 选择它。然后为每个项目定义所需的符号。

答案 1 :(得分:0)

更好的设计可能是以任何一种方式定义方法,并且其中一种方法只是一种无操作:

#if DEBUG
public void ConditionalMethod() { ... }
#else
public void ConditionalMethod() {} // Method does nothing
#endif

(当然,你也可以简单地将#if /#endif放在方法的主体周围。)

然后,Project B可以调用该方法,其行为会根据项目A的编译方式而改变。