Как разрешить, что это “Имя ресурса не является допустимым идентификатором” предупреждение компилятора

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

пример:

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

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

9
задан Kevin 16 February 2010 в 16:01
поделиться

7 ответов

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

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

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

9
ответ дан 4 December 2019 в 08:15
поделиться

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

Например:

Int32 counter;

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

dynamic counter = ResultOfFunc()

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

-121--3246016-

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

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

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

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

-121--3246014-

Основываясь на ссылке, которую вы разместили в вопросе, я думаю, что вы, вероятно, спрашиваете о сильно типизированной генерации ресурсов - это означает, что 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"]
9
ответ дан 4 December 2019 в 08:15
поделиться

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

0
ответ дан 4 December 2019 в 08:15
поделиться

Это зависит от временных рамок проекта на стороне DirectX.

Если проект должен быть готов через несколько месяцев, то следуйте совету Нильса. ЕСЛИ время больше года, я бы решил ограничиться DirectX9, поскольку машины XP со временем становятся все меньше и меньше. DirectX11 было бы хорошей идеей, особенно с ретрокомпатитированностью до уровня 9.0.

-121--3632097-

Возможно, вы захотите проверить эту ссылку:

http://www.gnu.org/s/libc/manual/html_node/Infinity-and-NaN.html

Я сделал это, и это хорошо работает на gcc 4.4.1


#include "math.h"

int main(int argc, char**argv)
{ 
    int x = INFINITY; 
    return 0;
}

-121--2568566-

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

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

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

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

7
ответ дан 4 December 2019 в 08:15
поделиться

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

Например:

Int32 counter;

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

dynamic counter = ResultOfFunc()

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

0
ответ дан 4 December 2019 в 08:15
поделиться

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

0
ответ дан 4 December 2019 в 08:15
поделиться

"Strongly Typed" в данном случае означает, что Visual Studio пытается сгенерировать объектную модель для использования на основе имен ваших ресурсов.

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

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

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

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

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

1
ответ дан 4 December 2019 в 08:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: