Le risorse nel file di progetto in VS2008 vengono "riutilizzate" in modo creativo dal progettista del modulo, è possibile evitare?

StackOverflow https://stackoverflow.com/questions/435466

Domanda

Abbiamo alcuni file di risorse generati automaticamente nel nostro progetto in Visual Studio 2008, con alcune versioni localizzate e in una di queste versioni localizzate, c'è una stringa che in questo caso è vuota.

Più esplicito. Abbiamo un file di risorse di base, con molte risorse di stringa. Abbiamo quindi altre 4 versioni localizzate di questo file e in uno di questi altri file localizzati, a una delle stringhe viene assegnato un valore vuoto.

Il problema ora è che il progettista del modulo è abbastanza felice di aver trovato una risorsa per una stringa e apparentemente non si fermerà davanti a nulla per riutilizzare questa risorsa per eventuali stringhe vuote che assegnerà una proprietà nel codice del designer generato per un modulo .

Ad esempio, se per qualche motivo una proprietà su un controllo non è specificata con un valore predefinito (quindi verrà serializzata per codificare anche se è vuota), farà riferimento alla nostra risorsa invece di scrivere la stringa vuota letterale nel codice C #.

Il problema è che fa riferimento alle versioni localizzate e queste non sono compilate in codice.

Ecco un esempio di codice abbreviato:

this.rpAllFields.KeyTip = 
  global::namespaces.SystemMessagesResources_sv_SE.
    dash_red_shift_info_description;

In questo caso, dash_red_shift_info_description non ha un valore per la locale sv-SE, quindi il progettista, quando vede una stringa vuota nel codice, proverà a collegarsi a quella risorsa. Ma SystemMessagesResources_sv_SE non è una classe esistente, ma apparentemente un nome di classe generato per la versione localizzata svedese del file di risorse SystemMessagesResources, che è compilato in una classe.

È possibile evitare questo? Ci stiamo stancando della ricerca / sostituzione ogni volta che cambiamo qualcosa nei file del modulo e siamo abbastanza sicuri che ci sia stata una cosa schiaffeggiante sulla fronte che ha fatto sì che ciò accadesse, ma siamo non è in grado di trovare noi stessi la causa di ciò.

Il codice sopra riportato, se rimuovessimo la risorsa, legge in questo modo:

this.rpAllFields.KeyTip = "";
È stato utile?

Soluzione

Potresti provare a creare una risorsa stringa empty_string, definita come " " per ogni locale. Se la rendi la prima risorsa, il progettista del modulo sceglierà (si spera) sempre quello come valore da spargere attraverso i tuoi moduli. In questo modo almeno utilizzerai una stringa designata a tale scopo.

Altri suggerimenti

Se il problema è causato da una stringa vuota nel file di risorse, quale sarebbe l'effetto di renderlo uno spazio. Quindi invece di " " il file di risorse contiene " & Quot ;. Non so se sia la soluzione migliore, ma sarei interessato a sapere se impedisce al progettista di utilizzare quella risorsa come stringa vuota predefinita. Tuttavia, non sapendo come viene utilizzato, non sono sicuro quale impatto di avere un valore che dovrebbe essere indefinito debba essere definito come uno spazio ...

Quanto ti serve una risorsa il cui valore è una stringa vuota? Posso immaginare alcuni scenari multilingue in cui una chiave di risorsa dovrebbe corrispondere allo spazio vuoto in alcune delle lingue supportate (se si utilizza la concatenazione di stringhe per alcuni elementi dell'interfaccia utente), sì.

Ma se il mio scenario non fosse qualcosa del genere, eliminerei semplicemente la voce di risorsa con la stringa vuota. Direi solo, " Quale testo autonomo dell'interfaccia utente si traduce in bianco, comunque? & Quot ;.

Se avessi davvero bisogno che la risorsa fosse vuota in alcuni , (dove sta per un articolo in una lingua e dove non esiste una parola equivalente in un'altra), proverei a vedere se potrebbe produrre lo stesso effetto in un altro modo.

L'esempio di file di risorse e codice generato sarebbe buono.

E quello che stai dicendo è: hai una definizione letterale stringa vuota nel tuo spazio dei nomi (la prima trovata) ma che sta causando qualche problema? Non sarà sempre vuoto? Quando compili il codice, fa cose bizzarre come questa per risparmiare spazio. Mi sono imbattuto in un problema simile durante la generazione di file XAML con codebehind per la compilazione automatica al volo di file di assemblaggio: il compilatore è abbastanza intelligente da sapere 'non fa differenza ma per noi lo ha fatto perché avrebbe rinominato i valori letterali (che sono stati utilizzati altrove).

Per ovviare a questo, abbiamo usato tipi denominati per queste primitive nel nostro spazio dei nomi e abbiamo reso quello globale. Quello che vedo qui è che il tuo spazio dei nomi globale sta riempiendo gli spazi vuoti, potresti averne uno "sotto" che valuta tutte le stringhe null.

Non ci lavoro da più di un anno, quindi perdonami se la mia formulazione è scadente, ma ciò che intendo è: pensa a XML. Devi usare esplicitamente lo spazio dei nomi nelle proprietà o assegnarli in basso (come la proprietà collegata in xaml).

Spero che questo aiuti (e abbia senso)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top