生成菜单下,参照“配置管理器”,C# - Visual Studio 2008能够进行条件编译吗?
有没有办法来评论我的C#代码,以便注释掉的代码无法编译,而解决的办法是在调试模式下,但如果我改变会编译它以释放模式?
为什么我要这个?我想要在Release模式下编译代码但不在Debug中的原因是我有一些代码无法从我的开发PC(从我的主机发送邮件的代码等)中运行。
我不想在发布之前通过我的代码运行并取消注释,我希望它是自动的。
生成菜单下,参照“配置管理器”,C# - Visual Studio 2008能够进行条件编译吗?
有没有办法来评论我的C#代码,以便注释掉的代码无法编译,而解决的办法是在调试模式下,但如果我改变会编译它以释放模式?
为什么我要这个?我想要在Release模式下编译代码但不在Debug中的原因是我有一些代码无法从我的开发PC(从我的主机发送邮件的代码等)中运行。
我不想在发布之前通过我的代码运行并取消注释,我希望它是自动的。
你在找这样的吗?
#if DEBUG
Console.WriteLine("Debug Mode");
#else
Console.WriteLine("Release Mode");
#endif
如果你只关心发布模式下,你可以使用:
#if !DEBUG
Console.WriteLine("Release Mode");
#endif
你可以使用的方法(但代码而不是单个行)有条件属性用于此目的
例如以下内容将被编译成DEBUG版本。
[Conditional("DEBUG")]
public void MyMethod()
{
// Do Stuff
}
DEBUG符号已在项目设置中指定。你必须创建自己的符号发布版本,“释放”,这样就可以做到这一点:
[Conditional("RELEASE")]
public void MyMethod()
{
// Do Stuff
}
不过,我建议你退一步,在你的问题重新从一个更高的期待水平,因为我不会推荐这个解决方案。
我可能是错的,但我认为编译器会忽略这些注释。如果我使用.NET Reflector来看我的装配,我看不到任何我知道存在的评论。
BlueMonkMN的方法将根据编译模式运行不同的代码。
如果你想有不同的代码的运行取决于您所使用的模式编译(和其他变量),退房PostSharp。这是一个后编译编译器,可以为您的程序集添加和删除代码。
示例使用: - 我爱有我的项目详细的调试和跟踪信息。 - 我恨有每个方法的结果或方法调用后print
或trace.write
声明,因为这额外的调试代码掩盖了功能做的工作。
您可以配置PostSharp以动态创建此额外调试信息!一些配置调整,你可以打印每个函数的每一个调用,并且每次调用的结果(具有可变内容)。这使得遵循程序逻辑流程变得非常容易。
我会尝试用面向对象技术来解决你的问题。使用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容器像Windsor,Unity,Ninject,或者Spring.NET来配置你的开发环境与发布环境。
您在“条件编译”中查找的术语。 – Richard 2009-07-11 13:22:05
从你的更新中,我认为条件编译并不是你想要的。这是你所要求的,但不是你所需要的。您需要为您的DEV环境运行的配置,另一个运行在QA中,另一个运行在Production中。我真的会倾向于一个配置或面向对象的解决方案。 – 2009-07-11 13:44:17
Ahhhhh,“有条件汇编”......无法想到这个术语。 – Chaddeus 2009-07-11 13:46:54