在我的Windows服务的构造函数中,我在#if DEBUG条件中有一些代码:
#if DEBUG
var container = CompositionRoot.DiBootstrapper.Initialize();
_initializeApplication = container.Resolve<IInitializeApplication>();
_initializeApplication.Initialize();
#endif
当我在发布模式下编译/构建项目并将其安装为Windows服务时,将执行#if DEBUG条件中的代码。
我只想在调试应用程序时运行代码。
有什么建议吗?
答案 0 :(得分:8)
答案 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常量。