错误CS0765在VS 2019 C#中为配置创建未在生成设置中设置Define DEBUG常量的表达式时



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

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

该行不编译,并且仅当当前配置不具有"0"时才给出以下错误;定义DEBUG常量";检查值:

错误CS0765只有定义声明或删除的条件方法不能在表达式树中使用

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

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

背景信息:

  • 我可以选中和取消选中DEBUG常量值,错误就会消失/出现
  • 我使用的是VS 2019企业版

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";忽略";因此表达式是"0";"不完整";,或者好像它从未被正确分配过,从而导致了错误。

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

Expression<Action> expresssion = () => WriteDebug("Easy!");
....
private static void WriteDebug(string str)
{
Debug.WriteLine(str);
}

最新更新