在 VS 2019 C# 中的配置的构建设置中未定义 DEBUG 常量的情况下创建表达式时出现错误 CS0765

Error CS0765 When Creating Expressions without Define DEBUG Constant set in the build settings for a configuration in VS 2019 C#

在我的 .Net 4.7.2 MVC5 Web 应用程序中,我尝试使用以下代码声明一个表达式:

Expression<Action> expresssion = () => Debug.WriteLine("Easy!");

只有当当前配置没有检查“Define DEBUG Constant”值时,此行才不会编译并给出以下错误:

Error CS0765 Partial methods with only a defining declaration or removed conditional methods cannot be used in expression trees

当我转到项目的属性页面并检查 Define DEBUG Constant 时,错误不仅随着 Intellisense 消失,而且按预期构建和工作。

这个值是否应该是表达式工作所必需的?

背景资料:

Debug.WriteLine 方法具有 Conditional 属性。

[Conditional("DEBUG")]
public static void WriteLine(string? message)

文档给出了线索​​...

//
// Summary:
//     Indicates to compilers that a method call or attribute should be ignored unless
//     a specified conditional compilation symbol is defined.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public sealed class ConditionalAttribute : Attribute

如果未定义 DEBUG 符号,WriteLine(string) 方法将被编译器“忽略”,因此表达式是“不完整的”,或者就好像它从未被正确分配一样,因此错误。

要解决此问题,请将 Debug.WriteLine 语句放在另一个命名函数中,然后在表达式中改用该函数。

Expression<Action> expresssion = () => WriteDebug("Easy!");

....

private static void WriteDebug(string str)
{
    Debug.WriteLine(str);
}