2009-07-11 76 views
5

生成菜单下,参照“配置管理器”,C# - Visual Studio 2008能够进行条件编译吗?

有没有办法来评论我的C#代码,以便注释掉的代码无法编译,而解决的办法是在调试模式下,但如果我改变会编译它以释放模式?

为什么我要这个?我想要在Release模式下编译代码但不在Debug中的原因是我有一些代码无法从我的开发PC(从我的主机发送邮件的代码等)中运行。

我不想在发布之前通过我的代码运行并取消注释,我希望它是自动的。

+0

您在“条件编译”中查找的术语。 – Richard 2009-07-11 13:22:05

+2

从你的更新中,我认为条件编译并不是你想要的。这是你所要求的,但不是你所需要的。您需要为您的DEV环境运行的配置,另一个运行在QA中,另一个运行在Production中。我真的会倾向于一个配置或面向对象的解决方案。 – 2009-07-11 13:44:17

+0

Ahhhhh,“有条件汇编”......无法想到这个术语。 – Chaddeus 2009-07-11 13:46:54

回答

10

你在找这样的吗?

#if DEBUG 
    Console.WriteLine("Debug Mode"); 
#else 
    Console.WriteLine("Release Mode"); 
#endif 

如果你只关心发布模式下,你可以使用:

#if !DEBUG 
    Console.WriteLine("Release Mode"); 
#endif 
10

你可以使用的方法(但代码而不是单个行)有条件属性用于此目的

例如以下内容将被编译成DEBUG版本。

[Conditional("DEBUG")] 
public void MyMethod() 
{ 
    // Do Stuff 
} 

DEBUG符号已在项目设置中指定。你必须创建自己的符号发布版本,“释放”,这样就可以做到这一点:

[Conditional("RELEASE")] 
public void MyMethod() 
{ 
    // Do Stuff 
} 

不过,我建议你退一步,在你的问题重新从一个更高的期待水平,因为我不会推荐这个解决方案。

-3

我可能是错的,但我认为编译器会忽略这些注释。如果我使用.NET Reflector来看我的装配,我看不到任何我知道存在的评论。

BlueMonkMN的方法将根据编译模式运行不同的代码。

如果你想有不同的代码的运行取决于您所使用的模式编译(和其他变量),退房PostSharp。这是一个后编译编译器,可以为您的程序集添加和删除代码。

示例使用: - 我有我的项目详细的调试和跟踪信息。 - 我恨每个方法的结果或方法调用后printtrace.write声明,因为这额外的调试代码掩盖了功能做的工作。

您可以配置PostSharp以动态创建此额外调试信息!一些配置调整,你可以打印每个函数的每一个调用,并且每次调用的结果(具有可变内容)。这使得遵循程序逻辑流程变得非常容易。

4

我会尝试用面向对象技术来解决你的问题。使用dependency injection,我会构建一个执行必要调试操作的类。

是这样的:现在

public class MyClass { 

    public MyClass(IDoOtherStuff stuffToDo) { 
     DoOtherStuff = stuffToDo; 
    } 

    private IDoOtherStuff DoOtherStuff { get; set; } 

    public void Do() { 
     DoOtherStuff.BeforeDo(); 

     // Blah blah blah.. 

     DoOtherStuff.AfterDo(); 
    } 
} 

public interface IDoOtherStuff { 
    void BeforeDo(); 
    void AfterDo(); 
} 

public class DebugOtherStuff : IDoOtherStuff { 
    public void BeforeDo() { 
     Debug.WriteLine("At the beginning of Do"); 
    } 

    public void AfterDo() { 
     Debug.WriteLine("At the end of Do"); 
    } 
} 

public class ReleaseOtherStuff : IDoOtherStuff { 
    public void BeforeDo() { } 
    public void AfterDo() { } 
} 

,您可以使用Inversion of control容器像WindsorUnityNinject,或者Spring.NET来配置你的开发环境与发布环境。

相关问题