2010-02-16 35 views
8

Tengo un montón de advertencias en un proyecto de Visual Studio 2005, la mayoría de ellas me advierten que un nombre de recurso no es un identificador válido.Cómo resolver este "compilador de nombre de recurso no es un identificador válido" advertencia

ejemplo:

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

MSDN online help indica que el nombre del recurso debe ser inflexible, y no contiene espacios. ¿Qué significa fuertemente tipado significa exactamente?

+2

También podría ser útil tener el código que genera este error para un mejor contexto. 'Strongly Typed' es una discusión muy general y profunda, cuando en realidad estás buscando arreglar un error de compilación en particular. – Nick

+0

Su pregunta realmente no rastrea con su advertencia. ¿Desea que le informemos cuál es el problema con su código (y si es así, también publicamos el código) o si desea una explicación de tipografía fuerte (y si es así, debe buscar en numerosos duplicados que ya están en StackOverflow). –

+0

Los recursos fueron ingresados ​​manualmente por alguien hace años. se usa para traducir mensajes de IU a diferentes idiomas. – Kevin

Respuesta

7

fuertemente tipado significa que una variable, campo o propiedad es de un tipo específico en lugar de solo Object.

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

Si utiliza recursos muy tipados, el código se genera con propiedades fuertemente tipadas para todos sus recursos. En este caso, el nombre del recurso se utiliza como el nombre de la propiedad, por lo tanto, debe ser un nombre de propiedad C# válido. Su ejemplo MB_ArchiveRestore.cs_11 contiene un punto y, en consecuencia, no es un nombre de propiedad válido. El generador de códigos reemplazará el punto con un guión bajo para que el nombre sea válido y le dará la advertencia descrita para informarlo.

+0

Incluso si su segunda parte es correcta, su primera oración no lo es. 'Strongly typed' en el contexto de un archivo de recursos significa que puede acceder al recurso mediante una clase fuertemente tipada, p. Ej. 'Properties.Resources.My_String' en lugar de' ResourceManager.GetString ("My.String") '(observe que todavía usa su valor original para acceder al recurso por su nombre. –

0

No estoy seguro de si le ayudará a solucionar su problema, pero con el interés de responder a su pregunta real. Fuertemente tipeado significa que la variable es de un tipo dado, a diferencia de algún tipo determinado en tiempo de ejecución. Confirmar Wikipedia

Por ejemplo:

Int32 counter; 

significa que la variable contador es fuertemente tipado, como la conocemos, es un Int32. Otros idiomas o el uso de palabras clave dinámica media:

dynamic counter = ResultOfFunc() 

tanto, el contador no es fuertemente tipado, como se determina en tiempo de ejecución por el resultado de la ResultOfFunc().

5

El problema se produce porque . no es un carácter válido en los identificadores.

¿Qué significa fuertemente tipado exactamente?

Aunque no es tan relevante para esta pregunta en particular, "fuertemente tipado" significa que un objeto tiene una noción definida de tipo. Por ejemplo, no puede hacer int i = "5"; en C#, porque "5" es una cadena y i es un número entero; sus tipos son incompatibles entre sí.

Esto es en contraste con los lenguajes "débilmente tipados", donde la noción de "tipo" no es tan fuerte. Un lenguaje débilmente tipeado podría decidir que para algo como i = 5; j = "6"; print (i + j);, la respuesta correcta es 11.

+0

+1 si elimino el. la advertencia desaparece – Kevin

+0

o le puede dar 56 – Mert

9

Basado en el enlace que ha publicado en la pregunta, creo que probablemente esté preguntando sobre strongly typed resource generation - eso significa que Visual Studio generará un archivo de recursos que le permitirá acceder a los recursos a través de propiedades escritas, por ejemplo

string fileName = Resources.FileName; 
bool someSetting = Resources.AllowDelete; 
byte[] binaryResource = Resources.SomeFile; 

en contraposición a los recursos sin tipo donde se tiene que convertir el valor devuelto por sí mismo porque devuelve el tipo System.Object en lugar de un tipo específico.

string fileName = (string)Resources["FileName"]; 
bool someSetting = (bool)Resources["AllowDelete"]; 
byte[] binaryResource = (byte[])Resources["SomeFile"] 
0

que tendría que adivinar que se quejan de la _11 al final, lo que haría que no es un archivo válido de C#, por lo tanto, no es un recurso válido.

+0

El _11 no lo convertiría en un archivo no válido –

1

"Strongly Typed" en este caso, significa que Visual Studio está intentando generar un modelo de objetos para que lo use, a partir de sus nombres de recursos.

Por ejemplo, supongamos que tiene un archivo de recursos con URL que apuntan a sus sitios web favoritos.sus recursos son algo así como:

cuando el recurso generate se utiliza para escribir fuertemente esto, usted va a terminar con un modelo de objetos que se puede llamar de esta manera:

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

cuando se tiene un punto en el nombre de el recurso, el generador de código no puede usarlo porque crearía nombres inválidos en el objeto de Recursos. para exmaple:

esto sería válido, ya que trataría de crear un recurso denominado Resources.Asp.NET

0

Supongo que tiene un recurso llamado "MB ArchiveRestore.cs 11". Desde VS 2005, el compilador (o más precisamente una herramienta complementaria) generará automáticamente clases de acceso para recursos incrustados. Estos se pueden usar para recuperar los recursos. La propiedad de clase para su ejemplo es probablemente Properties.Resources.MB_ArchiveRestore.cs_11. Estas clases de recursos tipados fuertes también proporcionan una manera conveniente para la localización.

Cuestiones relacionadas