【问题标题】:DEBUG vs RELEASE and distributing Assembly调试与发布和分发程序集
【发布时间】:2017-05-17 10:59:51
【问题描述】:

我正在创建和分发程序集以供其他开发人员使用。 我正在分发我的程序集的发布版本(不是调试)。 在我的程序集的一个类中,我将代码设置为仅在调试模式下运行,使用

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

如果其他开发人员从他们的项目中引用我的程序集并在调试模式下运行他们的项目,我的调试是否只能有条件地运行?

【问题讨论】:

  • 如果您分发代码的 RELEASE 版本,这是不可能的,因为该代码已在构建时被编译器剥离
  • 它们是预编译器语句。所以他们在编译时处理。因此,非调试版本将在编译时从程序集中删除。
  • 这是一个 XY 问题。使用Debugger.IsAttached 进行运行时检查。语义略有不同,但也许这就是你想要的?不能肯定地说,这个问题没有明确说明。
  • 这取决于他们添加到项目中的可执行文件。如果另一个项目使用您的程序集,他们将添加 bin 文件夹中的 dll。 bin 文件夹将有一个 Release 和 Debug 文件夹。所以这取决于他们使用哪个文件夹。
  • @jdw 不,它没有。他说他只分发“发布”版本。

标签: c# .net conditional-compilation


【解决方案1】:

如果其他开发人员从他们的项目中引用我的程序集并在调试模式下运行他们的项目,我的调试是否只能有条件地运行?

否,因为由于预处理器的限制,Console.WriteLine() 从未在发布模式下编译。

MSDN 对此有更多话要说:

当 C# 编译器遇到 #if 指令,最后是 #endif 指令时,它将编译指令之间的代码只有在定义了指定的符号时 ... @987654321 @

此外,将其从程序集中移除是不正确的,因为它从一开始就从未存在过。

【讨论】:

    猜你喜欢
    • 2010-09-23
    • 2012-02-24
    • 2011-12-03
    • 1970-01-01
    • 2011-03-26
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多