C#:Release-Build-DL​​L 中的 Debug.Assert() 似乎由 Debug-Build-Project 激活

Posted

技术标签:

【中文标题】C#:Release-Build-DL​​L 中的 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-DL​​L 中的 Debug.Assert() 似乎由 Debug-Build-Project 激活的主要内容,如果未能解决你的问题,请参考以下文章

C#中的索引器

仍然可以从 C# 中的另一个类访问私有变量

Oracle 选择查询是 C# 中的无效数字

c# 中的泛型 & 访问 T 的静态成员

使用 c++ 中的字符串调用 C# 方法

c#中的for和while循环