首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以在构建发布后执行#if调试?

是否可以在构建发布后执行#if调试?
EN

Stack Overflow用户
提问于 2017-01-26 12:43:42
回答 4查看 531关注 0票数 3

对于以下部署的代码是否可以到达或“悬挂”into...even,正在进行安全讨论,尽管它是在发布模式下构建的。

有什么想法?

编辑:

我确实在DotPeek中“看到”了--即使是在发布构建之后。

  • 然而,该文件是“灰色的”。
  • 这是否意味着它不会执行?
  • DotPeek仅仅是“反编译”-- code...it没有向您展示在内置的模式中存在什么代码.对吗?

代码看起来像:

代码语言:javascript
复制
    using System;
    using System.ServiceProcess;

    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main()
        {
#if DEBUG
            var myservice = new StpListener();
            myservice.OnDebug();

            //KEEP the service alive
            System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
#else
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] 
            { 
                new StpListener() 
            };
            ServiceBase.Run(ServicesToRun);
#endif
        }
    } 
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-01-26 12:46:56

不要将调试/发布配置与条件代码混淆。完全可以将DEBUG条件属性应用于发布模式配置。

看,我是邪恶的!

请参阅:当#if调试运行时

票数 5
EN

Stack Overflow用户

发布于 2017-01-26 12:47:13

这是编译时特性。一旦编译器完成了它的工作,您将要么在#if#else之间得到代码,要么在#else#endif之间得到代码。

您将永远不会(只要将这些项放在其中)生成包含这两组代码的二进制代码。

票数 5
EN

Stack Overflow用户

发布于 2017-01-26 12:46:24

假设您正在使用Roslyn编译器(尽管对所有兼容C#的编译器来说都是如此),#if DEBUG代码甚至不会编译到IL中,因此绝对不能被访问。

但是,如果您使用Conditional("DEBUG"),代码会将其转化为IL,并且只会删除对它的调用,因此可以说这可能是一个安全缺陷。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41873726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档