2012-03-29 13 views
0

Aus welchem ​​Grunde auch immer, wenn mehrere RESOURCES-Dateien in eine einzige Satelliteneinheit (DLL) die Ressourcen zeigen nicht kompilieren. Das Kompilieren einer einzelnen Ressource funktioniert. Hier sind die Schritte, die ich verwendet habe ...Strong Named Satelliten-Baugruppen ResGen & AL mit mehreren resx/Ressourcen-Dateien

  1. Wir haben ein Projekt namens "Report Viewer". Dieses Projekt wird unter Verwendung eines Schlüssels MySnKey.snk über Eigenschaften> Signieren> Unterzeichnen der Assembly signiert. Wählen Sie eine Schlüsseldatei mit starkem Namen aus: MySnKey.snk.
  2. Alle Formulare wurden auf Localizable = True
  3. aktualisiert Wir haben alle Resx-Dateien in Deutsch de-DE verarbeitet. Es gibt nur zwei resx: MainForm.resx (Projektstammverzeichnis) und Resources.resx (Eigenschaftenverzeichnis).
  4. Ich habe einen Ordner mit MainForm.de-DE.resx und Resources.de-DE.resx, die die übersetzten Versionen dieser Dateien sind.
  5. resgen Verwendung,

    > "C: \ Programme \ Microsoft SDKs \ Windows \ V6.0A \ bin \ ResGen"/kompilieren Resources.de-DE.resx ReportViewer.Resources.de-DE.resources

    > "C: \ Programme \ Microsoft SDKs \ Windows \ V6.0A \ bin \ ResGen"/kompilieren MainForm.de-DE.resx ReportViewer.MainForm.de-DE.resources

Dies erstellt die entsprechenden RESOURCES-Dateien. Jetzt zu verknüpfen, verwende ich AL.exe:

> "C: \ Programme \ Microsoft SDKs \ Windows \ v6.0A \ bin \ AL"/t: lib/Bembed: ReportViewer.MainForm.de-DE. Ressourcen, ReportViewer.Resources.de-DE.resources/culture: de-DE/out:ReportViewer.resources.dll /template:../../../Output/ReportViewer/bin/Debug/ReportViewer.exe/keyfile : ../ MySnKey.snk

Dies schafft eine ReportViewer.resources.dll Datei. Wenn ich es in den entsprechenden Unterordner de-DE> ReportViewer.resources.dll platziere, kein Glück. In Program.cs, bevor Run genannt wird, ich habe

Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE"); 

IF, nur ich die Mainform wie

> „C enthalten: \ Programme \ Microsoft SDKs \ Windows \ V6.0A \ bin \ AL "/ t: lib /embed:ReportViewer.MainForm.de-DE.resources/kultur: de-DE /out:ReportViewer.resources.dll /template:../../../Output/ReportViewer/bin/ Debug/ReportViewer.exe /keyfile:../MySnKey.snk

Die entsprechenden Ressourcen angezeigt werden.

Das ist ziemlich verwirrend für mich. Wenn ich die RESX-Dateien zur Lösung hinzufüge und kompiliere, funktioniert die Ausgabe-DLL korrekt, aber wir versuchen zu vermeiden, diese Satellitenübersetzungen in die Lösung zu bringen.

Es werden keine Fehler erzeugt und die Dateien erstellt werden, so bin ich verloren, was ich nicht tue.

Jede Hilfe wird sehr geschätzt. Ich habe die Unterschiede zwischen der Ausgabe-DLL beim Hinzufügen der Dateien zur Lösung zu der Ausgabedatei beim Ausführen von AL.exe verglichen und beide enthalten alle Übersetzungen.

EDIT Lösung aufzunehmen, da ich nicht die Frage

Anscheinend habe ich mit dem embed Option verwirrt beantworten kann, und es ist Nutzung. Um richtig das Al.exe Dienstprogramm verwenden, musste ich verwenden:

> "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ResGen" Resources.de-DE.resx ReportViewer.Properties.Resources.de-DE.resources 

Hinweis oben, dass die Eigenschaften Namespace hinzugefügt wird. Das hatte ich vorher nicht getan.

Beachten Sie, dass kein Properties-Namespace hinzugefügt wird, da MainForm Simply im ReportViewer-Namespace ist.

Beachten Sie, dass in dieser Zeile mehrere/eingebettete Elemente vorhanden sind. Ich benutzte das Komma, das die Interna umbenennt und nicht das ist, was ich wollte. Die Bereitstellung eines Abstands zwischen den Dateien führt zu einem (scheinbar) unverwandten Fehler. Einen großartigen Artikel finden Sie unter http://ondotnet.com/pub/a/dotnet/2002/10/14/local2.htm?page=2.

Für Vollständigkeit, eine andere Möglichkeit, dieses Skript zu schreiben

> "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ResGen" Resources.de-DE.resx 

Mitteilung wäre, dass keine Umbenennung hier gemacht wird, ist der Ausgang einfach Resources.de-DE.resources

> "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ResGen" MainForm.de-DE.resx 

feststellen, dass hier wird keine Umbenennung vorgenommen, die Ausgabe erfolgt einfach MainForm.de-DE.resources

> "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\AL" /t:lib 
/embed:Resources.de-DE.resources,ReportViewer.Properties.Resources.de-DE.resources 
/embed:MainForm.de-DE.resources,ReportViewer.MainForm.de-DE.resources 
/culture:de-DE 
/out:ReportViewer.resources.dll /template:../../../Output/ReportViewer/bin/Debug/ReportViewer.exe /keyfile:../MySnKey.snk 

N otice, dass die Umbenennung nach dem Komma in der Einbettungsoption erfolgt. Das erste Argument ist der Dateiname (die .resources-Datei) und nach dem Komma ist der vollständig qualifizierte Name (namespace.class.xx-XX.resources).

Antwort

0

In der Post beantwortet, bevor ich wusste, dass ich es hier beantworten könnte.