#if DEBUG无法处理Windows Service发布版本

时间:2016-08-18 12:15:57

标签: c#

在我的Windows服务的构造函数中,我在#if DEBUG条件中有一些代码:

#if DEBUG
            var container = CompositionRoot.DiBootstrapper.Initialize();
            _initializeApplication = container.Resolve<IInitializeApplication>();
            _initializeApplication.Initialize();
#endif

当我在发布模式下编译/构建项目并将其安装为Windows服务时,将执行#if DEBUG条件中的代码。

我只想在调试应用程序时运行代码。

有什么建议吗?

4 个答案:

答案 0 :(得分:8)

确保未在发布模式中定义“DEBUG”常量。

enter image description here

此外,当解决方案处于发布模式时,请验证您的项目是否设置为在发布模式下构建。

enter image description here

答案 1 :(得分:0)

您可以使用

if (System.Diagnostics.Debugger.IsAttached)
{
    // ....
}

而不是编译时间常数来实现此目的。代码将始终编译到您的代码中,但只有在您调试应用程序时才会执行。请注意,如果其他人将调试器附加到您的应用程序,也会执行此操作。

然而:很可能你配置错了。

在Visual Studio中,转到“BUILD - &gt; Configuration Manager”并验证特定项目是否设置为“DEBUG”。

如果是这种情况并且您的项目有多个程序集:请验证您的主exe的发布版本是否使用新生成的版本构建来进行程序集引用,而不是{{1}内部引用的旧引用}文件夹。

看起来你使用了IOC,所以你的主程序集bin/debug可能没有直接引用包含A常量#DEBUG的程序集。因此,如果您构建B,则更改为B后,项目A不会重建。您可以通过右键单击解决方案并选择B来解决此问题,在下拉框中选择Build dependencies,然后选中A

答案 2 :(得分:0)

您的服务仍然以调试模式构建(检查配置管理器),或者您已在发布模式中指定了条件编译符号(检查项目属性)

答案 3 :(得分:-1)

检查项目配置,然后选择发布。尝试取消选中定义DEBUG常量