在 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 常量值和错误 disappears/appears
- 我正在使用 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.WriteLine
语句放在另一个命名函数中,然后在表达式中改用该函数。
Expression<Action> expresssion = () => WriteDebug("Easy!");
....
private static void WriteDebug(string str)
{
Debug.WriteLine(str);
}
在我的 .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 常量值和错误 disappears/appears
- 我正在使用 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.WriteLine
语句放在另一个命名函数中,然后在表达式中改用该函数。
Expression<Action> expresssion = () => WriteDebug("Easy!");
....
private static void WriteDebug(string str)
{
Debug.WriteLine(str);
}