我在Visual Studio 2005项目中遇到了一堆警告,其中大多数警告我资源名称不是有效的标识符。
示例:
The resource name 'MB_ArchiveRestore.cs_11' is not a valid identifier.
MSDN online help表示资源名称需要强类型,不包含空格。强类型的确切含义是什么?
答案 0 :(得分:9)
根据您在问题中发布的链接,我认为您可能会询问strongly typed resource generation
- 这意味着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"]
答案 1 :(得分:9)
强类型表示变量,字段或属性属于特定类型,而不仅仅是Object
。
public class User
{
public String FirstName { get; set; } // Strongly typed
public Object LastName { get; set; } // Weakly typed
}
如果使用强类型资源,则会为所有资源生成具有强类型属性的代码。在这种情况下,资源名称用作属性名称,因此它必须是有效的C#属性名称。您的示例MB_ArchiveRestore.cs_11
包含一个点,因此不是有效的属性名称。代码生成器将使用下划线替换点以使名称有效,并为您提供所描述的警告以通知您。
答案 2 :(得分:7)
出现此问题是因为.
不是标识符中的有效字符。
强类型的确切含义是什么?
虽然它与这个特定问题不相关,但“强类型”意味着一个对象具有明确的类型概念。例如,您无法在C#中执行int i = "5";
,因为“5”是一个字符串而i
是一个整数 - 它们的类型彼此不兼容。
这与“弱类型”语言形成鲜明对比,“类型”的概念并不强烈。弱类型语言可能会决定类似i = 5; j = "6"; print (i + j);
之类的语句,正确的响应是11。
答案 3 :(得分:1)
在这种情况下,“强类型”表示Visual Studio正在尝试从您的资源名称生成供您使用的对象模型。
例如,假设您有一个包含指向您喜欢的网站的网址的资源文件。你的资源就像:
当资源生成用于强类型化时,最终会得到一个可以像这样调用的对象模型:
string googleUrl = Resources.Google;
string msUrl = Resources.Microsoft;
当您在资源名称中有句点时,代码生成器无法使用它,因为它会在Resources对象中创建无效名称。例如:
这将无效,因为它会尝试创建名为Resources.Asp.NET
答案 4 :(得分:0)
我不确定它是否会帮助您解决问题但是为了回答您的实际问题。强类型意味着变量属于给定类型,而不是在运行时确定的某种类型。查看Wikipedia
例如:
Int32 counter;
表示计数器变量是强类型的,因为我们知道它是Int32。其他语言或动态关键字的使用意味着:
dynamic counter = ResultOfFunc()
表示计数器不是强类型的,因为它是在运行时由ResultOfFunc()的结果确定的。
答案 5 :(得分:0)
我不得不猜测它最后会抱怨_11,这会使它不是一个有效的C#文件,因此不是一个有效的资源。
答案 6 :(得分:0)
我猜你有一个名为“MB ArchiveRestore.cs 11”的资源。
从VS 2005开始,编译器(或更确切地说是一个附加工具)将自动生成嵌入式资源的访问类。这些可用于检索资源。
您的示例的类属性可能是Properties.Resources.MB_ArchiveRestore.cs_11
。
这些stronlgy类型的资源类也提供了一种方便的本地化方式。