调试版 vs 发布版以及分发程序集

4

我正在创建和分发一个程序集供其他开发人员使用。 我正在分发我的程序集的Release版本(而不是调试版本)。 在我的程序集的某个类中,我有一段代码仅在Debug模式下运行。

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

如果其他开发人员从他们的项目中引用我的汇编并在Debug模式下运行他们的项目,那么我的Debug条件语句会不会运行?

3
如果你分发的是代码的RELEASE版本,那么它是不可能的,因为编译器在构建时已经将该代码剥离。 - Steve
4
它们是预编译语句。因此,它们在编译时被处理。因此,在编译后,非调试版本将从程序集中删除。 - Liam
这是一个 XY 问题。使用 Debugger.IsAttached 进行运行时检查。语义上略有不同,但也许这就是你想要的?不能确定,这个问题说明不清楚。 - Cody Gray
2
@jdw 不是这样的。他说他只分发“发布”版本。 - Cody Gray
@micky 我标记了它。 - Cody Gray
显示剩余6条评论
1个回答

11
如果其他开发者从他们的项目中引用我的程序集并在调试模式下运行他们的项目,我的调试条件会执行吗?
不会,因为由于预处理器限制,Console.WriteLine() 从未在Release模式下编译。
MSDN 对此有更多解释:
当 C# 编译器遇到 #if 指令,最终跟着一个 #endif 指令时,它将仅在定义了指定符号时编译指令之间的代码... 告诉我更多... 此外,认为它被从程序集中删除是不正确的,因为它一开始就不存在。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接