13

Ich habe ein Web-Projekt in VS 2008. Wir haben einige globale Ressourcen-Dateien (*. Resx) im Ordner App_GlobalResources für die Internationalisierung. All dies funktioniert wie ein Zauber auf meiner lokalen IIS-Installation von VS.Globale Ressourcen können nicht nach der Veröffentlichung der Website in VS2008

Aber wenn ich mein Webprojekt auf dem lokalen Dateisystem und/oder einem anderen Server veröffentliche, können alle Ressourcen nicht mehr gefunden werden. Also ich denke, die Vorkompilierung ist irgendwie korrumpierend. Wenn ich das vorkompilierte Web aufruft, bekomme ich einen Fehler, dass das Ressourcenobjekt mit dem Schlüssel xyz nicht gefunden werden kann, obwohl es vorher gefunden werden konnte.

Ich überprüfte mit .NET-Reflektor, wenn das Ressource-Zeug es in die * .dlls geschafft hat. Alle diese Bezeichner sind dort (bin/Web.dll, bin/<Kultur> /Web.resources.dll). Die Kennungen werden wie folgt geladen:

<asp:MenuItem NavigateUrl="~/OrderNew.aspx" Text="<%$ Resources:MyProject, MenuNewOrder %>" Value="NewOrder"> 

Die Ressourcendateien werden MyProject.resx und MyProject genannt. <Kultur>. Resx wo <Kultur> entspricht die spezifische Kultur (d. H. MyProject.de-DE.resx).

Irgendwelche Ideen, um das zu lösen?

Ich schätze wirklich jede Hilfe.

Dank

Edit:

Wenn ich den App_GlobalResources Ordner manuell an den Ausgang zu kopieren, können die Ressourcen normalerweise geladen werden. Ich frage mich wirklich, worum es bei dieser Vorkompilierung geht.

Ich bin immer noch interessiert, das Problem "den richtigen Weg" zu lösen.

+0

Ihre ist die Lösung, zu der ich schließlich kam - wir scheinen die Compiler-Aktion "embedded resource" zu verwenden, um auf Ressourcen von code-behind zuzugreifen, aber die Dateien selbst in/app_globalresources, um mit <% $ Resources auf sie zuzugreifen: Klasse, ResKey%>. Es scheint, als sollte es einen besseren Weg geben. – Ripside

Antwort

12

Ich hatte das gleiche Problem und musste zwei Änderungen an den Resx-Dateieigenschaften vornehmen.

  1. die "Build Aktion" Set to Content
  2. die "Copy to Output Directory" Set immer
+2

Das behebt das Problem, die Sachen manuell zu kopieren, obwohl Kopieren, wenn neuere für mich ausreichend ist. – Scoregraphic

2

(ich auf der vorherigen Antwort kommentieren kann nicht kopieren ... kein Ruf noch ...?)

Das hat mein Problem nicht gelöst, fürchte ich.

Wenn ich die "Content/Copy Always" -Lösung probiere, bekomme ich eine Ausnahme, dass die Verknüpfung zur Kompilierzeit nicht funktioniert hat.

Warum benötigt asp.net die resx-Datei, wenn die Ressourcen in kompiliert werden?

+0

Auch wenn Sie keinen Ruf haben, können Sie immer unter Ihrer Frage kommentieren –

1

Ich hatte diesen Fehler beim Kopieren einer Ressourcendatei von einem anderen Projekt.

Ich löste dies, indem ich die globale Ressource löschte, eine neue Ressource hinzufügte und die data Elemente vom alten zum neuen XML kopierte.

Daraus ergeben sich die folgenden Einstellungen für die Ressource:

<ItemGroup> 
    <Content Include="App_GlobalResources\Global.resx"> 
     <Generator>GlobalResourceProxyGenerator</Generator> 
     <LastGenOutput>Global.Designer.cs</LastGenOutput> 
    </Content> 
    </ItemGroup> 
+0

Heiliger Mist, danke. Ich wünschte, ich könnte das mehr als einmal aufbessern. – EKW

0

ich hatte das gleiche Problem. Jedes Mal, wenn ich meine App auf dem Small Business Server (SBS2008) veröffentlichte, steckte sie auf der Kontrollnamenszeile, aber tatsächlich auf dem meta-: resourcekey-Teil davon. Keine der oben genannten Lösungen half mir.

Ich verbrachte 6 Stunden damit herauszufinden, schließlich erkannte ich, dass dies passiert, wenn ich einige Ordner cleenup auf dem Server gemacht habe. Am Anfang waren alle meine Apps auf E: in ihren Ordnern, aber dann habe ich Ordner mit Namen erstellt, die auf Apps hinweisen, ApplicationPools und ich verschiebe entsprechende Apps dorthin.

Ich weiß nicht, wie IIS7 auf meinem SBS nach Ressourcen-Dateien suchen, aber das war definitiv das Problem. Wenn ich wieder mit meinen Apps nach E komme: haben wieder alle angefangen wie ein Charme zu arbeiten.

Verwandte Themen