c#预处理器指令(#if和#endif)不起作用.编译错误
本文关键字:#endif 不起作用 编译 错误 #if 预处理 处理器 指令 | 更新日期: 2023-09-27 18:10:02
我正在尝试调试VS2010, 4.0框架中的现有应用程序。我得到这个编译时错误:
"名称'b_resources'在当前上下文中不存在"。
我看不出下面的代码有什么问题:
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Data;
using System.Drawing;
#if TR
using b_resources = Common.Resources.TResources;
#endif
#if EN
using b_resources = Common.Resources.EnResources;
#endif
namespace Common
{
public static class BResources
{
public static string caption { get { return b_resources.ProductName; } }
public static string company_name { get { return b_resources.CompanyName; } }
}
}
TResources
和EnResources
为资源文件(.resx)
我错过了一些与。net相关的参考资料吗?
最明显的问题是:您在当前构建中定义TR
或EN
编译符号吗?如果不是,两个#IF
语句都将为假,并且using
语句将不包括在内。换句话说,如果没有定义这些符号,将编译以下代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Data;
using System.Drawing;
// Note: missing using statements
namespace Common
{
public static class BResources
{
public static string caption { get { return b_resources.ProductName; } }
public static string company_name{ get { return b_resources.CompanyName; } }
}
}
要检查或设置编译符号,请转到项目的属性。然后在"生成"选项卡上看到一个名为"条件编译符号"的文本框。检查这里是否定义了符号。如果没有,在那里添加一个。
如果您正在使用Visual Studio,实际上您可以立即看到是否存在这种情况。如果没有为当前构建定义符号,则#IF
块内的代码将显示为灰色。如果定义了该符号,它将像普通代码一样显示。
没有默认情况,所以如果TR或EN都没有定义,则没有定义b_resources。你需要在那里有一些其他的情况,这样它就能一直编译。例如,如果您希望您的EN资源为默认值:
#if TR
using b_resources = Common.Resources.TResources;
#elif EN
using b_resources = Common.Resources.EnResources;
#else
using b_resources = Common.Resources.EnResources; // or whatever you want as default
#endif
如果TR或EN均未定义,则包含最终的else。
要编译代码,您需要在项目属性的Build设置中定义TR或EN。目前这两个都没有定义,所以b_resources永远不会被定义。