C#:Release-Build-DLL 中的 Debug.Assert() 似乎由 Debug-Build-Project 激活
Posted
技术标签:
【中文标题】C#:Release-Build-DLL 中的 Debug.Assert() 似乎由 Debug-Build-Project 激活【英文标题】:C#: Debug.Assert() in Release-Build-DLL seems to be activated by Debug-Build-Project 【发布时间】:2017-03-28 10:52:05 【问题描述】:我有一个包含大量 Debug.Assert() 调用的 DLL。 我已将此 DLL 构建为 Release,因此 Assert 未处于活动状态(我用一个小测试程序检查了这一点)。 现在我在一个调试构建的软件项目中使用这个 DLL,由于某种原因,来自 DLL 的断言再次处于活动状态。 项目的 DEBUG 定义是否会重新激活 DLL 中的断言? (VisualStudio 2013)
【问题讨论】:
【参考方案1】:documentation 声明:
当 C# 编译器遇到 #if 指令,最后是 #endif 指令时,只有定义了指定的符号,它才会编译指令之间的代码。
考虑到这一点,我想说你不应该看到这些断言,因为在发布模式下编译时,代码应该被忽略了。
您可以尝试反编译您的发布程序集,看看是否生成了代码。
【讨论】:
实际上没有#if/#endif。 Debug.Assert 定义如下:'[Conditional("DEBUG")] public static void Assert(bool condition);' 是的,但是查看 Assert 源,它似乎正在使用 #IF。 referencesource.microsoft.com/#mscorlib/system/bcldebug.cs,108以上是关于C#:Release-Build-DLL 中的 Debug.Assert() 似乎由 Debug-Build-Project 激活的主要内容,如果未能解决你的问题,请参考以下文章