2010-02-16 10 views
8

Ho una serie di avvisi in un progetto di Visual Studio 2005, la maggior parte di loro mi avvisano che il nome di una risorsa non è un identificatore valido.Come risolvere questo avviso del compilatore "Nome della risorsa non è un identificatore valido"

esempio:

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

MSDN online help indica che il nome della risorsa deve essere fortemente tipizzato, e non contenga spazi. Cosa significa esattamente fortemente tipizzato?

+2

Potrebbe anche essere utile avere il codice che genera questo errore per un contesto migliore. 'Strongly Typed' è una discussione piuttosto generale e profonda, quando in realtà stai cercando di correggere un particolare errore del compilatore. – Nick

+0

La tua domanda non tiene traccia del tuo avviso. Vuoi che ti diciamo cosa c'è di sbagliato nel tuo codice (e se è così, inserisci anche il codice) o vuoi una spiegazione fortemente tipizzata (e se è così, dovresti cercare tra i numerosi duplicati già su StackOverflow). –

+0

Le risorse sono state inserite manualmente da qualcuno anni fa. è usato per tradurre i messaggi dell'interfaccia utente in diverse lingue. – Kevin

risposta

7

fortemente tipizzato significa che una variabile, campo, o una proprietà è di un tipo specifico anziché solo Object.

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

Se si utilizzano risorse fortemente tipizzate, il codice viene generato con proprietà fortemente tipizzate per tutte le risorse. In questo caso, il nome della risorsa viene utilizzato come nome della proprietà, quindi deve essere un nome di proprietà C# valido. Il tuo esempio MB_ArchiveRestore.cs_11 contiene un punto e, di conseguenza, non è un nome di proprietà valido. Il generatore di codice sostituirà il punto con un carattere di sottolineatura per rendere valido il nome e ti darà l'avviso descritto per informarlo.

+0

Anche se la tua seconda parte è corretta, la prima frase non lo è. 'Fortemente digitato' nel contesto di un file di risorse significa che puoi accedere alla risorsa da una classe fortemente tipizzata, ad es. 'Properties.Resources.My_String' invece di' ResourceManager.GetString ("My.String") '(nota che usi ancora il tuo valore originale per accedere alla risorsa tramite il suo nome. –

0

Non sono sicuro se ti aiuterà a risolvere il problema ma nell'interesse di rispondere alla tua domanda. Fortemente tipizzato significa che la variabile è di un determinato tipo, al contrario di un determinato tipo determinato in fase di esecuzione. Controlla per Wikipedia

Ad esempio:

Int32 counter; 

significa che la variabile del contatore è fortemente tipizzato, così come lo conosciamo è un Int32. Altre lingue o l'uso di parole chiave dinamiche significano:

dynamic counter = ResultOfFunc() 

significa che contatore non è fortemente tipizzato, come si è determinato in fase di esecuzione il risultato della ResultOfFunc().

5

Il problema si verifica perché . non è un carattere valido negli identificatori.

Che cosa significa esattamente esattamente?

Anche se non è pertinente per questa particolare domanda, "fortemente tipizzato" significa che un oggetto ha una nozione definita di tipo. Ad esempio, non è possibile eseguire int i = "5"; in C#, perché "5" è una stringa e i è un numero intero - i loro tipi non sono compatibili tra loro.

Questo è il contrasto con le lingue "debolmente tipizzate", in cui la nozione di "tipo" non è così forte. Una lingua debolmente digitata potrebbe decidere che per qualcosa come i = 5; j = "6"; print (i + j);, la risposta corretta è 11.

+0

+1 se rimuovo il file. l'avviso scompare – Kevin

+0

o Potrebbe darti 56 – Mert

9

Sulla base del link che hai postato nella domanda, penso che probabilmente stai chiedendo di strongly typed resource generation - ciò significa che Visual Studio genererà un file di risorse che ti permetterà di accedere alle risorse tramite proprietà tipizzate, ad es

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

al contrario di risorse non tipizzati in cui si deve lanciare il valore restituito da soli perché restituisce tipo System.Object invece di un tipo specifico.

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

avrei dovuto intuire che si tratta di lamentarsi del _11 alla fine, che renderebbe non è un file C# valido, quindi, non è una risorsa valida.

+0

Il _11 non lo renderebbe un file non valido –

1

"Strongly Typed" in questo caso, significa che Visual Studio sta tentando di generare un modello di oggetto da utilizzare, dai nomi delle risorse.

Ad esempio, supponiamo di disporre di un file di risorse con URL che rimandino ai siti Web preferiti.le risorse sono qualcosa come:

quando la risorsa generate è usata per scrivere con forza questo, vi ritroverete con un modello di oggetto che può essere chiamata in questo modo:

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

quando si dispone di un punto nel nome di la risorsa, il generatore di codice non può usarlo perché creerebbe nomi non validi nell'oggetto Risorse. per exmaple:

questo sarebbe valido perché avrebbe cercato di creare una risorsa di nome Resources.Asp.NET

0

Immagino che tu abbia una risorsa chiamata "MB ArchiveRestore.cs 11". Dal momento che VS 2005 il compilatore (o più precisamente uno strumento aggiuntivo) genererà automaticamente classi di accesso per le risorse incorporate. Questi possono essere usati per recuperare le risorse. La proprietà della classe per l'esempio è probabilmente Properties.Resources.MB_ArchiveRestore.cs_11. Queste classi di risorse tipizzate a stronzio forniscono anche un modo conveniente per la localizzazione.

Problemi correlati