Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解决这个问题;资源名称不是有效的标识符";编译器警告_C#_Resources_Compiler Warnings - Fatal编程技术网

C# 如何解决这个问题;资源名称不是有效的标识符";编译器警告

C# 如何解决这个问题;资源名称不是有效的标识符";编译器警告,c#,resources,compiler-warnings,C#,Resources,Compiler Warnings,在VisualStudio2005项目中,我收到了一系列警告,其中大多数警告都警告我资源名称不是有效的标识符 例如: The resource name 'MB_ArchiveRestore.cs_11' is not a valid identifier. 指示资源名称需要为强类型,且不包含空格。强类型的确切含义是什么?我不确定它是否能帮助您解决问题,但为了回答您的实际问题。强类型表示变量的类型是给定的,而不是在运行时确定的某种类型。退房 例如: Int32 counter; 表示计数器变

在VisualStudio2005项目中,我收到了一系列警告,其中大多数警告都警告我资源名称不是有效的标识符

例如:

The resource name 'MB_ArchiveRestore.cs_11' is not a valid identifier.

指示资源名称需要为强类型,且不包含空格。强类型的确切含义是什么?

我不确定它是否能帮助您解决问题,但为了回答您的实际问题。强类型表示变量的类型是给定的,而不是在运行时确定的某种类型。退房

例如:

Int32 counter;
表示计数器变量是强类型的,因为我们知道它是Int32。其他语言或使用动态关键字意味着:

dynamic counter = ResultOfFunc()

表示计数器不是强类型,因为它是在运行时由resultofunc()的结果确定的。

出现问题的原因是
不是标识符中的有效字符

强类型的确切含义是什么

虽然它与这个特殊的问题不相关,“强类型”意味着一个对象有一个明确的类型概念。例如,您不能执行
int i=“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