Laden...

System.Resources.MissingManifestResourceException

Letzter Beitrag vor 5 Monaten 3 Posts 286 Views
System.Resources.MissingManifestResourceException

Ich versuche mich gerade an einer Internationalisierung. Der Anfang des Quellcodes meiner App sieht wie folgt aus:

namespace CalendarApp
{
   public class CalendarForm : Form
   {
       private MonthCalendar calendar;
       private Button updateButton;

       public CalendarForm()
       {

           CultureInfo.CurrentCulture = new CultureInfo("de-DE");
           var rm = new ResourceManager("CalendarApp.i18n", typeof(CalendarForm).Assembly);

Ich habe folgende Verzeichnisstruktur:

CalendarApp
-i18n
-resources.de.resx
-resources.resx

-Program.cs

Es handelt sich bei meinen resource-Dateien um eingebettete Assemblys, die Lösung / Solution habe ich auch neu gebaut. Diesen Fehler "System.Resources.MissingManifestResourceException: 'Für die angegebene Kultur oder die neutrale Kultur konnten keine Ressourcen gefunden werden. Stellen Sie sicher, dass CalendarApp.i18n.resources beim Kompilieren richtig in die Assembly CalendarApp eingebettet wurde, oder dass die erforderlichen Satellitenassemblys geladen werden können und vollständig signiert sind.'" erhalte ich aber, wenn ich den Ressourcenmanager aufrufen will mit "rm.GetString("new");".

Woran könnte dieser Fehler liegen?

Meine resource.de.resx-Datei sieht wie folgt aus: updateButton.Text = rm.GetString("new");

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<root>
    <resheader name="resmimetype">
        <value>text/microsoft-resx</value>
    </resheader>
    <resheader name="version">
        <value>2.0</value>
    </resheader>
    <resheader name="reader">
        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    </resheader>
    <resheader name="writer">
        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    </resheader>
    <data name="save">
        <value>speichern</value>
    </data>
    <data name="new">
        <value>neu</value>
    </data>
    <data name="March">
        <value>März</value>
    </data>
    <data name="April">
        <value>April</value>
    </data>
    <data name="May">
        <value>Mai</value>
    </data>
</root> 

Du hast anscheinend nur den Verzeichnisnamen angegeben, es fehlt aber der Ressourcename, d.h.

var rm = new ResourceManager("CalendarApp.i18n.resources", typeof(CalendarForm).Assembly);

Du kannst dir auch mal das Beispielprojekt .NET 5 Windows Forms localized app anschauen.

Aber warum hast du die Ressourcendateien (sowie den Resource-Manager) nicht von VS erstellen lassen? → Exemplarische Vorgehensweise: Lokalisieren von Windows Forms

PS: i18nals Verzeichnisname, sowie insbesondere als Namensbereich, halte ich persönlich für nicht so gut.

Vielen Dank.