2012-08-17 12 views
11

Mi sono appena imbattuto nel comportamento più strano in Visual Studio 2010 mentre lavoravo con i file di risorse Resx e non riesco a capirlo .Visual Studio 2010 non genera il codice di progettazione Resource (Resx) se il file è localizzato

Il problema è il seguente: Visual Studio non genererà il file designer.cs per un file di risorse con un nome localizzato (ad esempio resource.fr.resx), ma funziona bene per gli altri file con nomi semplici (come resource.resx).

Ecco un'istantanea della mia installazione di Visual Studio progetto:

enter image description here

Come potete vedere ho appena fatto un semplice test con i file di risorse 3:

  • test.resx
  • test2.resx
  • test.fr.resx

I file designer.cs per test.resx e test2.resx vengono generati correttamente. Tuttavia, viene creato test.fr.designer.cs ma sempre vuoto, indipendentemente da ciò che faccio.

Ho il doppio e il triplo controllato: la proprietà dello strumento personalizzato è impostata correttamente per il file localizzato. Tutte le proprietà sono esattamente le stesse su tutti i file (sto usando PublicResxFileCodeGenerator, ma ottengo lo stesso comportamento se imposto il modificatore di accesso a internal e utilizzo ResxFileCodeGenerator).

Nota: ho notato che quando viene creato un file di risorse, di default, il modificatore di accesso viene impostato su "Interno". Tuttavia, quando si crea un file di risorse localizzato (resource.fr.resx), il suo valore predefinito è "Nessuna generazione di codice". Ho appena scoperto che è interessante notare poiché dimostra che visual Studio sta trattando il file localizzato in modo diverso per qualche motivo.

-> C'è qualcosa che mi manca qui? Gradirei se qualcuno avesse qualche idea sull'argomento, questo mi sta facendo impazzire.

risposta

19

Mentre non ho esaminato questo particolare problema, ho avuto numerosi altri problemi con i file ".resx". Visual Studio a volte è buggato (gestendo file ".resx" tra le altre cose) e ho ufficialmente segnalato alcuni di questi a MSFT (dato che influisce sul mio stesso programma di localizzazione commerciale). In ogni caso, normalmente non dovresti nominare le cose in questo modo. In pratica viola le regole di localizzazione di MSFT. I file di lingua predefiniti non dovrebbero normalmente avere un codice lingua incorporato, e potrebbe essere soffocato su di esso per questo motivo. Avrei bisogno di indagare, ma quello che dovresti fare è creare "Test.resx", che ha un file "Designer.cs", e quindi "Test.fr.resx", che non lo fa. Tutte le stringhe di lingua predefinite vengono quindi inserite in "Test.resx" e le corrispondenti stringhe francesi in "Test.fr.resx". Nel codice, si accede al nome fortemente tipizzato trovato in "Test.Designer.cs" e la stringa che si ottiene sarà la stringa della lingua predefinita a meno che non si imposti "System.Threading.Thread.CurrentThread.CurrentUICulture" su "fr" . Tornerai alla versione francese della stringa da "Test.fr.resx", a meno che non venga trovata lì (non c'è traduzione), nel qual caso recupererai la stringa di fallback da "Test.resx" (cioè, la stringa di lingua predefinita). Questo è il modo in cui funziona il modello hub-and-spoke.

+0

Immagino che stavo solo incomprensibilmente come dovrebbe funzionare allora. Tuttavia, il gestore delle risorse non sta trovando le mie stringhe localizzate, che è ciò che mi ha spinto a indagare su tutta questa faccenda. Ma questo potrebbe essere per un'altra ragione.Indagherò di nuovo partendo dal presupposto che non c'è niente di sbagliato con i file di risorse. – Aerendel

+0

Ok, provalo come ho descritto e dovrebbe funzionare. – Larry

+1

Infatti, non ho capito che il framework ha bisogno solo di generare il codice per il file di risorse master che mi ha portato nella direzione sbagliata. Grazie per averlo spiegato e segnalato! Visual Studio si blocca effettivamente sulla generazione di codice per un file che segue la convenzione di denominazione localizzata, che in realtà ha senso. Tutto funziona ora dopo aver cambiato i file localizzati in "No code genration". Molte grazie! – Aerendel

Problemi correlati