C# 如何解决这个问题;资源名称不是有效的标识符";编译器警告
在VisualStudio2005项目中,我收到了一系列警告,其中大多数警告都警告我资源名称不是有效的标识符 例如:C# 如何解决这个问题;资源名称不是有效的标识符";编译器警告,c#,resources,compiler-warnings,C#,Resources,Compiler Warnings,在VisualStudio2005项目中,我收到了一系列警告,其中大多数警告都警告我资源名称不是有效的标识符 例如: The resource name 'MB_ArchiveRestore.cs_11' is not a valid identifier. 指示资源名称需要为强类型,且不包含空格。强类型的确切含义是什么?我不确定它是否能帮助您解决问题,但为了回答您的实际问题。强类型表示变量的类型是给定的,而不是在运行时确定的某种类型。退房 例如: Int32 counter; 表示计数器变
The resource name 'MB_ArchiveRestore.cs_11' is not a valid identifier.
指示资源名称需要为强类型,且不包含空格。强类型的确切含义是什么?我不确定它是否能帮助您解决问题,但为了回答您的实际问题。强类型表示变量的类型是给定的,而不是在运行时确定的某种类型。退房 例如:
Int32 counter;
表示计数器变量是强类型的,因为我们知道它是Int32。其他语言或使用动态关键字意味着:
dynamic counter = ResultOfFunc()
表示计数器不是强类型,因为它是在运行时由resultofunc()的结果确定的。出现问题的原因是
不是标识符中的有效字符
强类型的确切含义是什么
虽然它与这个特殊的问题不相关,“强类型”意味着一个对象有一个明确的类型概念。例如,您不能执行int i=“5”因为“5”是字符串,i
是整数——它们的类型彼此不兼容
这与“弱类型”语言形成对比,后者的“类型”概念没有那么强。弱类型语言可能决定,对于i=5;j=“6”;打印(i+j)
,正确的回答是11。根据您在问题中发布的链接,我认为您可能是在询问关于强类型资源生成的问题
——这意味着Visual Studio将生成一个资源文件,允许您通过类型属性访问资源,例如
string fileName = Resources.FileName;
bool someSetting = Resources.AllowDelete;
byte[] binaryResource = Resources.SomeFile;
与非类型化资源相反,在非类型化资源中,您必须自己强制转换返回值,因为它返回的是System.Object类型,而不是特定类型
string fileName = (string)Resources["FileName"];
bool someSetting = (bool)Resources["AllowDelete"];
byte[] binaryResource = (byte[])Resources["SomeFile"]
我不得不猜测,它在抱怨最后的#11,这将使它不是一个有效的C#文件,因此,它不是一个有效的资源。在这种情况下,“强类型”意味着Visual Studio正试图从资源名生成一个供您使用的对象模型
例如,假设您有一个资源文件,其中的URL指向您最喜欢的网站。您的资源类似于:
- 谷歌:
- 微软:
当使用resource generate强类型时,您将得到一个对象模型,可以这样调用:
字符串googleUrl=Resources.Google;
字符串msUrl=Resources.Microsoft;
当资源名称中有句点时,代码生成器将无法使用它,因为它将在资源对象中创建无效名称。对于exmaple:
- Asp.NET:
这将是无效的,因为它将尝试创建名为Resources的资源。Asp.NET
强类型表示变量、字段或属性是特定类型的,而不仅仅是对象
public class User
{
public String FirstName { get; set; } // Strongly typed
public Object LastName { get; set; } // Weakly typed
}
如果使用强类型资源,则会为所有资源生成具有强类型属性的代码。在这种情况下,资源名称用作属性名称,因此它必须是有效的C#属性名称。您的示例MB_ArchiveRestore.cs_11
包含一个点,因此不是有效的属性名称。代码生成器将用下划线替换点以使名称有效,并提供所述警告以通知您。我猜您有一个名为“MB ArchiveRestore.cs 11”的资源。
自VS2005以来,编译器(或者更准确地说是一个附加工具)将自动为嵌入式资源生成访问类。这些可用于检索资源。
示例的类属性可能是Properties.Resources.MB\u ArchiveRestore.cs\u 11
。
这些stronlgy类型的资源类还提供了一种方便的本地化方法。为了更好的上下文,使用生成此错误的代码也可能会有所帮助。”“强类型”是一个相当普遍和深入的讨论,实际上,您正在寻找修复特定编译器错误的方法。您的问题实际上与您的警告不符。您想让我们告诉您的代码有什么问题(如果有,也发布代码)还是想解释强类型(如果有,您应该查看StackOverflow上已有的大量副本)。这些资源是多年前由某人手动输入的。它用于将UI消息翻译为不同的语言。有几个不同的resx文件,每个文件的名称相同,但值不同。即使第二部分正确,但如果第一句不正确,_11也不会使其成为无效文件<代码>强类型
在资源文件的上下文中意味着您可以通过强类型类访问资源,例如属性.Resources.My_String
,而不是ResourceManager.GetString(“My.String”)
(请注意,您仍然使用原始值通过名称访问资源。或者它可能会给您56