Как разрешить это предупреждение компилятора "имя ресурса не является допустимым идентификатором"
У меня есть куча предупреждений в проекте Visual Studio 2005, большинство из них предупреждают меня, что имя ресурса не является допустимым идентификатором.
пример:
The resource name 'MB_ArchiveRestore.cs_11' is not a valid identifier.
MSDN online help указывает, что имя ресурса должно быть строго типизировано и не содержать пробелов. Что означает strongly typed?
7 ответов
Strongly typed означает, что переменная, поле или свойство определенного типа, а не просто Object
.
public class User
{
public String FirstName { get; set; } // Strongly typed
public Object LastName { get; set; } // Weakly typed
}
Если вы используете строго типизированные ресурсы, код генерируется со строго типизированными свойствами для всех ваших ресурсов. В этом случае имя ресурса используется в качестве имени свойства, поэтому оно должно быть допустимым именем свойства C#. Ваш пример MB_ArchiveRestore.cs_11
содержит точку и, следовательно, не является допустимым именем свойства. Генератор кода заменит точку на подчеркивание, чтобы сделать имя действительным и дает вам описанное предупреждение, чтобы сообщить вам об этом.
основываясь на ссылке, которую вы разместили в вопросе, я думаю, что вы, вероятно, спрашиваете о strongly typed resource generation
- это означает, что Visual Studio создаст файл ресурсов, который позволит вам получить доступ к ресурсам через типизированные свойства, например,
string fileName = Resources.FileName;
bool someSetting = Resources.AllowDelete;
byte[] binaryResource = Resources.SomeFile;
В отличие от нетипизированных ресурсов, где вы должны привести возвращаемое значение самостоятельно, потому что он возвращает тип System.Объект вместо определенного типа.
string fileName = (string)Resources["FileName"];
bool someSetting = (bool)Resources["AllowDelete"];
byte[] binaryResource = (byte[])Resources["SomeFile"]
проблема возникает из-за .
недопустимый символ в идентификаторах.
что означает строго типизированный?
хотя это не актуально для данного конкретного вопроса, "строго типизированный" означает, что объект имеет определенное понятие. Например, вы не можете сделать int i = "5";
в C#, потому что "5" это строка и i
целое число-их типы несовместимы друг с другом.
это контрастирует с " слабо типизированные "языки, где понятие" тип " не так сильно. Слабо типизированный язык может решить, что для чего-то вроде i = 5; j = "6"; print (i + j);
правильный ответ 11.
"строго типизированный" в данном случае означает, что Visual Studio пытается создать объектную модель для использования, из названия ресурса.
например, скажем, у вас есть файл ресурсов с URL-адресами, которые указывают на ваши любимые веб-сайты. ваши ресурсы что-то вроде:
- Google:http://google.com
- Microsoft:http://www.microsoft.com
когда генерируемый ресурс используется для строго введите это, вы получите объектную модель, которая может быть вызвана следующим образом:
string googleUrl = Resources.Google;
string msUrl = Resources.Microsoft;
когда у вас есть точка в имени ресурса, генератор кода не может ее использовать, потому что он создаст недопустимые имена в объекте Resources. например:
- Asp.NET:http://asp.net
это будет недопустимо, потому что он попытается создать ресурс с именем Resources.Asp.NET
Я не уверен, что это поможет вам решить вашу проблему, но в интересах ответа на ваш фактический вопрос. Строго типизированная означает, что переменная имеет заданный тип, в отличие от некоторого типа, определенного во время выполнения. Проверьте Википедия
например:
Int32 counter;
означает, что переменная счетчика строго типизирована, поскольку мы знаем, что это Int32. Другие языки или использование динамических ключевых слов означают:
dynamic counter = ResultOfFunc()
означает, что счетчик не строго типизированный, так как он определяется во время выполнения результатом ResultOfFunc().
Я должен был бы догадаться, что он жалуется на _11 в конце, что сделало бы его недействительным файлом c#, таким образом, не действительным ресурсом.
Я думаю, что у вас есть ресурс с именем "MB ArchiveRestore.cs 11".
Начиная с VS 2005 компилятор (или, точнее, надстройка) будет автоматически генерировать классы доступа для встроенных ресурсов. Их можно использовать для извлечения ресурсов.
Свойство class для вашего примера, вероятно,Properties.Resources.MB_ArchiveRestore.cs_11
.
Эти stronlgy типизированные классы ресурсов также обеспечивают удобный способ локализации.