2009-08-26 18 views
39

Nel mio webproject sto utilizzando 4 file di risorse nella mia cartella App_GlobalResources. Uno di essi (lang.resx) è stato creato prima del mio arrivo sul progetto. Ha lo spazio dei nomi corretto (WebApplication.App_GlobalResources) e il modificatore di accesso: public.Modifica dello spazio dei nomi dei file di risorsa (resx) e del modificatore di accesso

D'altra parte, gli altri tre risorsa file che ho appena creato ha uno spazio dei nomi diverso (Resources) e internal accesso modificatore, e non posso cambiarlo nel Modulo di File di risorse da Visual Studio, perché è disabilitato. Se provo a cambiarlo direttamente nel file designer.cs, le modifiche vengono annullate al successivo salvataggio del file.

Non è un bug critico, ma può essere fuorviante per gli altri sviluppatori del progetto trovare spazi dei nomi e modificatori di accesso diversi per i file di risorse che utilizzeranno.

risposta

42

Non sono del tutto sicuro di quale sia il problema, ma posso dirvi che è possibile risolverlo modificando lo strumento utilizzato per generare il codice.

Quando ho provato a seguire this article, ho anche imbattuto in questo problema. Dopo aver scaricato i file sorgente come suggerito dall'autore, ho notato che il file di risorse che era già presente aveva la seguente classe nella proprietà "Custom Tool": "PublicResXFileCodeGenerator". Inoltre, la proprietà "Build Action" era impostata su "Embedded Resource", ma non sono sicuro che sia parte del problema.

Qualsiasi nuovo file di risorse creato ha utilizzato lo strumento personalizzato "GlobalResourceProxyGenerator". Dopo averlo sovrascritto con il già citato "PublicResXFileCodeGenerator", sembrava che il problema fosse risolto, qualunque fosse il vero problema.

Ho anche notato che il file di risorse presente era nel formato "2.0", mentre i nuovi file erano nel formato "1.3". Puoi vederlo quando apri il file resx usando un editor XML (o usando "open with" da Visual Studio stesso).

Spero che tu possa farlo funzionare in questo modo, non è l'ideale. È probabile che si tratti di un problema di installazione con Visual Studio 2008 e SP1 o qualcosa del genere.

Aggiornamento:

This blog entry può anche aiutare.

+0

Inserimento blog molto utile. Grazie! – ongle

+0

Questo succede anche in VS2010: copiare + incollare un file resx nel progetto potrebbe essere stato il problema, imposta il file .resx su GlobalResourceProxyGenerator se si esegue questa operazione. –

6

Il resx preleva lo spazio dei nomi in base allo spazio dei nomi specificato nella configurazione del progetto di Visual Studio. Aggiorna il tuo progetto per avere il giusto spazio dei nomi, e il resx dovrebbe ereditarlo (di sicuro nuovi, non sono sicuro se quelli esistenti saranno corretti - dovrebbero).

+0

Lo spazio dei nomi di progetto predefinito sembra buono: 'WebApplication' –

4

I modificatori di accesso ai file di risorse sono nello .csproj;

La modifica diretta del file .csproj dovrebbe risolvere il problema.

Cercare l'elemento <Generator> e impostare il suo valore in base agli esempi di seguito:

Un file di risorse con internal modificatore di simile a questo,

<ItemGroup> 
<EmbeddedResource Update="resources.resx"> 
    <Generator>ResXFileCodeGenerator</Generator> 
    <LastGenOutput>resources.Designer.cs</LastGenOutput> 
</EmbeddedResource> 
</ItemGroup> 

in cui un file di risorse con public modificatore assomiglia Questo.

<ItemGroup> 
<EmbeddedResource Update="resources.resx"> 
    <Generator>PublicResXFileCodeGenerator</Generator> 
    <LastGenOutput>resources.Designer.cs</LastGenOutput> 
</EmbeddedResource> 
</ItemGroup> 
+0

Sarebbe utile se si espandesse la risposta in modo che dicesse anche * dove * nel '.csproj' si suppone che guardi. Per quanto ne so, è semplicemente che viene utilizzato un generatore diverso ('PublicResXFileCodeGenerator' invece di' ResXFileCodeGenerator'). Dovrebbe anche essere modificabile nella finestra delle proprietà di VS per l'elemento del progetto '.resx'. – stakx

+0

grazie @stakx; Ho aggiunto esempi come suggerito –

10

Oppure è possibile modificare l'attributo CustomTool (testato in VS2010).

Non vi resta che aprire le proprietà di file del file di risorse e cambiare il “strumento personalizzato” da “GlobalResourceProxyGenerator” per “PublicResXFileCodeGenerator”, che è lo strumento predefinito per file di risorse locali. Quindi è necessario modificare "Build Action" su "Embedded Resource". Si consiglia inoltre di assegnare un adeguato strumento personalizzato Namespace come “Risorse”, al fine di accedere al file in modo corretto, ma questo non è necessario ...

Source

+0

Fare attenzione a chi utilizza ASP.NET, perché durante la pubblicazione con "Risorsa incorporata" questo potrebbe non essere pubblicato sul server. "Build Action" come "Content" funziona bene anche se –

44

La risposta più immediata è: Basta aprire le Proprietà del file di risorse e cambiare lo Custom Tool Namespace nello spazio dei nomi che ti serve.
Semplice come quello.

+3

La risposta più semplice per VS2012 –

Problemi correlati