Как устранить это предупреждение компилятора «Имя ресурса не является допустимым идентификатором» - PullRequest
9 голосов
/ 16 февраля 2010

У меня есть куча предупреждений в проекте Visual Studio 2005, большинство из них предупреждают меня о том, что имя ресурса не является допустимым идентификатором.

пример:

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

Справка MSDN означает, что имя ресурса должно быть строго набрано и не содержать пробелов. Что именно означает строго напечатанный текст?

Ответы [ 7 ]

9 голосов
/ 16 февраля 2010

Строго типизированный означает, что переменная, поле или свойство имеют определенный тип, а не просто Object.

public class User
{
    public String FirstName { get; set; } // Strongly typed
    public Object LastName { get; set; } // Weakly typed
}

Если вы используете строго типизированные ресурсы, код генерируется со строго типизированными свойствами для всех ваших ресурсов. В этом случае имя ресурса используется в качестве имени свойства, поэтому оно должно быть допустимым именем свойства C #. Ваш пример MB_ArchiveRestore.cs_11 содержит точку и, следовательно, не является допустимым именем свойства. Генератор кода заменит точку на подчеркивание, чтобы имя стало действительным, и выдает предупреждение, описанное вами.

9 голосов
/ 16 февраля 2010

Исходя из ссылки, которую вы разместили в вопросе, я думаю, что вы, вероятно, спрашиваете о 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"]
7 голосов
/ 16 февраля 2010

Проблема возникает из-за того, что . не является допустимым символом в идентификаторах.

Что означает строго типизированный текст?

Хотя это не так актуально для этого конкретного вопроса, «строго типизированный» означает, что объект имеет определенное представление о типе. Например, вы не можете сделать int i = "5"; в C #, потому что «5» - это строка, а i - целое число - их типы несовместимы друг с другом.

Это контрастирует со "слабо типизированными" языками, где понятие "тип" не так сильно. Язык со слабой типизацией может решить, что для чего-то вроде i = 5; j = "6"; print (i + j); правильный ответ - 11.

1 голос
/ 16 февраля 2010

«Сильно типизированный» в данном случае означает, что Visual Studio пытается сгенерировать объектную модель для использования из имен ресурсов.

Например, допустим, у вас есть файл ресурсов с URL-адресами, которые указывают на ваши любимые веб-сайты. ваши ресурсы что-то вроде:

когда для создания строгой типизации используется генератор ресурсов, вы получите объектную модель, которую можно вызывать так:

string googleUrl = Resources.Google; string msUrl = Resources.Microsoft;

когда у вас есть точка в имени ресурса, генератор кода не может использовать его, потому что это создаст недопустимые имена в объекте Resources. для примера:

это будет недопустимо, потому что он попытается создать ресурс с именем Resources.Asp.NET

0 голосов
/ 16 февраля 2010

Я предполагаю, что у вас есть ресурс с именем "MB ArchiveRestore.cs 11". Начиная с VS 2005 компилятор (или, точнее, дополнительный инструмент) будет автоматически генерировать классы доступа для встроенных ресурсов. Они могут быть использованы для получения ресурсов. Свойство класса для вашего примера, вероятно, Properties.Resources.MB_ArchiveRestore.cs_11. Эти строго типизированные классы ресурсов также предоставляют удобный способ локализации.

0 голосов
/ 16 февраля 2010

Я должен был бы предположить, что он жалуется на _11 в конце, что делает его недопустимым файлом C #, а значит, не допустимым ресурсом.

0 голосов
/ 16 февраля 2010

Я не уверен, поможет ли это вам решить вашу проблему, но в интересах ответа на ваш настоящий вопрос. Строго типизированный означает, что переменная имеет заданный тип, в отличие от некоторого типа, определенного во время выполнения. Проверить Википедия

Например:

Int32 counter;

Означает, что переменная counter строго типизирована, поскольку мы знаем, что это Int32. Другие языки или использование динамических ключевых слов означают:

dynamic counter = ResultOfFunc()

означает, что счетчик не является строго типизированным, так как он определяется во время выполнения результатом ResultOfFunc ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...