Die Situation:
- Ich habe eine Klassenbibliothek namens
RT.Servers
, die einige Ressourcen enthält (vom Typbyte[]
, aber ich denke nicht, dass das wichtig ist). - Dieselbe Klassenbibliothek enthält eine Methode, die eine dieser Ressourcen zurückgibt
- Ich habe ein einfaches Programm (mit einem Verweis auf diese Bibliothek), das nur diese einzelne Methode aufruft
Ich bekomme eine MissingManifestResourceException
mit folgender Nachricht:
Es konnten keine für die angegebene Kultur oder die neutrale Kultur geeigneten Ressourcen gefunden werden. Stellen Sie sicher, dass "Servers.Resources.resources" beim Kompilieren korrekt in die Assembly "RT.Servers" eingebettet oder verknüpft wurde oder dass alle erforderlichen Satelliten-Assemblys ladbar und vollständig signiert sind.
Ich habe noch nie mit Kulturen oder mit der Unterzeichnung von Versammlungen herumgespielt, deshalb weiß ich nicht, was hier los ist. Dies funktioniert auch in einem anderen Projekt, das dieselbe Bibliothek verwendet. Irgendwelche Ideen?
Antworten:
Alles, was ich tun musste, um dieses Problem zu beheben, war, mit der rechten Maustaste auf die
Resources.resx
Datei im Projektmappen-Explorer zu klicken und auf Benutzerdefiniertes Tool ausführen zu klicken . Dadurch wird die automatisch generierteResources.Designer.cs
Datei neu generiert .Wenn die .resx-Datei manuell zum Projekt hinzugefügt wurde, muss die Custom Tool-Eigenschaft der Datei auf "ResXFileCodeGenerator" festgelegt werden.
Das Problem ist auf eine Nichtübereinstimmung der Namespaces zurückzuführen, die auftritt, wenn Sie den "Standard-Namespace" der Assembly in den Projekteinstellungen ändern. (Ich habe es von (vorher)
"Servers"
in (jetzt) geändert"RT.Servers"
.)Im automatisch generierten Code in
Resources.Designer.cs
gibt es den folgenden Code:Die wörtliche Zeichenfolge
"Servers.Resources"
musste in geändert werden"RT.Servers.Resources"
. Ich habe dies manuell gemacht, aber das Ausführen des benutzerdefinierten Tools hätte es genauso gut gemacht.quelle
Ich bin heute gerade auf dieses Problem gestoßen und habe diese Microsoft-Hilfe- und Support-Seite gefunden , die das Problem tatsächlich umgangen hat.
Ich hatte ein paar Delegierte oben in meiner Datei, im globalen Namespace, und plötzlich bekam ich
MissingManifestResourceException
beim Ausführen des Programms eine in dieser Zeile:Dann habe ich die Delegaten in den Namespace verschoben, habe den gleichen Fehler bekommen. Schließlich habe ich die Delegaten in die einzige Klasse in dieser Datei eingefügt, und der Fehler ist verschwunden, aber ich wollte die Delegaten nicht in dieser Klasse oder diesem Namespace haben.
Dann bin ich oben auf diesen Link gestoßen, auf dem stand
Ich habe die Delegaten (die ich nicht als "Klassendefinitionen" betrachten würde) am Ende dieser Datei außerhalb des lokalen Namespace platziert, und das Programm hat die nicht
MissingManifestResourceException
mehr erhalten. Was für ein irritierender Fehler. Dies scheint jedoch eine robustere Lösung zu sein, als den automatisch generierten Code zu ändern :)quelle
Ich bin auf ein ähnliches Problem gestoßen, und obwohl ich weiß, dass es nicht die Ursache für das OP ist, werde ich es hier veröffentlichen, damit eine Antwort verfügbar ist, wenn in Zukunft jemand anderes auf dieses Problem stößt.
Wenn Sie eine Klasse vor der Designer-Klasse hinzufügen, wird
MissingManifestResourceException
zur Laufzeit eine Ausnahme angezeigt (kein Fehler oder Warnung zur Kompilierungszeit), daWeitere Informationen finden Sie in diesem Beitrag .
quelle
Ich hatte das gleiche Problem, verwendete jedoch den von Timwi vorgeschlagenen Befehl " Benutzerdefiniertes Tool ausführen" habe nicht geholfen in meinem Fall.
Es führte mich jedoch in die richtige Richtung, da ich in den Eigenschaften der .resx- Datei landete . Hier habe ich einen Unterschied zu einem anderen .resx bemerkt Datei, der keine Probleme verursachte.
In meinem Fall musste ich die Eigenschaft "Build Action" von "Resource" in "Embedded Resource" ändern.
Meine beste Vermutung aus diesem Grund ist, dass ich die .resx in einer Bibliothek hatte, die von einer anderen Anwendung verwendet wurde. Meine Anwendung hatte keine eigene .resx- Datei, daher musste sie die aus der Bibliothek verwenden - die nur verfügbar ist, wenn sie in die Bibliothek eingebettet ist und nicht "eigenständig".
quelle
Als ich in Vs 2012 ein ähnliches Problem ausführte, stellte sich heraus, dass die Eigenschaft "Custom Tool Namespace" der resx-Datei falsch war (in meinem Fall war sie tatsächlich nicht festgelegt, sodass der generierte Code diese Ausnahme zur Laufzeit auslöste). . Meine letzten Eigenschaften für die resx-Datei waren ungefähr so:
quelle
Siehe auch: MissingManifestResourceException beim Ausführen von Tests nach dem Erstellen mit MSBuild (.mresource hat einen Pfad im Manifest)
Ich wiederhole die Antwort hier nur der Vollständigkeit halber:
Das Hinzufügen von LogicalName zur Projektdatei behebt das Problem:
Das heißt, der eingebettete Ressourceneintrag in der Projektdatei sieht folgendermaßen aus:
Dies wird detailliert beschrieben in: http://blogs.msdn.com/b/msbuild/archive/2007/10/19/manifest-resource-names-changed-for-resources-files.aspx
Beachten Sie, dass wir eine .resx-Datei verwenden, der Fehler jedoch weiterhin auftritt.
Update: Das Problem mit Ressourcen (inkl. XAML) scheint mit Ausgabepfaden und der Verwendung von Schrägstrichen in Vorwärts- oder Rückwärtsrichtung zu zusammenhängen, wie in: Warum führt das Ändern von Projektausgabeverzeichnissen zu folgenden Ursachen: IOException wurde nicht behandelt "Ressource 'app.xaml' kann nicht gefunden werden" . "
quelle
Ich bin auf eine andere Ursache für dieses Problem gestoßen, die nichts mit resx-Dateien zu tun hatte. Ich hatte eine Klassenbibliothek, in der AssemblyInfo.cs Folgendes enthielt:
Die Assembly enthielt keinen WPF-Code, kein Thema oder keine Ressourcenwörterbücher. Ich habe die Ausnahme durch Entfernen des ThemeInfo-Attributs beseitigt.
Ich habe nur keine wirkliche Ausnahme bekommen
Beim Anzeigen von Ausnahmedetails forderte das System MyAssembly.g.resources an
Ich hoffe, dies könnte jemand anderem helfen.
quelle
Ich bin mir nicht sicher, ob es den Leuten helfen wird, aber dieser hat für mich funktioniert:
Das Problem, das ich hatte, war, dass ich die folgende Nachricht erhielt:
Ich habe versucht, die in mein Projekt eingebetteten Ressourcen aus einer anderen Klassenbibliothek abzurufen.
Um das Problem zu beheben, habe ich den Zugriffsmodifikator auf der Registerkarte Projekt-> Eigenschaften-> Ressourcen von "Intern" (nur innerhalb derselben Klassenbibliothek zugänglich) auf "Öffentlich" (von einer anderen Klassenbibliothek aus zugänglich) gesetzt.
Dann renn und voilà, kein Fehler mehr für mich ...
quelle
Die von BlaM gegebene Lösung hat auch bei mir funktioniert.
Ich bin ein VS 2013-Benutzer. Nachdem ich viele Korrekturen durchlaufen hatte, aber kein Glück hatte, versuchte ich Folgendes:
Das ist es! :) :)
quelle
Ich hatte das gleiche Problem, aber in meinem Fall platziere ich eine Klasse in einem Benutzersteuerelement, das mit dem Benutzersteuerelement wie diesem zusammenhängt
Die Lösung bestand darin, das so
MyUserControlObject
an das Ende der Usercontrol-Klasse zu verschiebenich hoffe das hilft
quelle
Ich habe den MissingManifestResourceException-Fehler erhalten, nachdem ich mein Projekt von VS2005 auf VS2010 portiert habe. In der Datei, die meine Formularklasse enthält, wurden keine anderen Klassen definiert. Außerdem hatte ich meinen resx-Ressourcendateinamen richtig eingestellt. Hat nicht funktioniert.
Also habe ich die resx-Dateien gelöscht und neu generiert. Alles gut jetzt.
quelle
Vor kurzem stieß ich auf das gleiche Problem, kämpfte ein wenig, fand dieses Thema, aber keine Antworten waren für mich richtig.
Mein Problem war , dass , wenn ich Hauptfenster von meinem WPF - Projekt entfernt (es ist nicht ein Hauptfenster hat), ich habe vergessen zu entfernen
StartupUri
ausApp.xaml
. Ich denke, diese Ausnahme kann auftreten, wenn Sie einen Fehler haben.StartupUri
Wenn also jemand damit zu kämpfen hat, melden Sie sichStartupUri
anApp.xaml
.quelle
Ich bin kürzlich auf dieses Problem gestoßen und habe in meinem Fall einige Dinge getan:
Stellen Sie sicher, dass die Namespaces in der Designer.cs-Datei der resx-Datei konsistent sind
Stellen Sie sicher, dass der Standard-Namespace der Assembly (klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie Eigenschaften) auf den Namespace festgelegt ist, in dem sich die Ressourcendatei befindet.
Nachdem ich Schritt 2 ausgeführt hatte, verschwand die Ausnahme.
quelle
Ich hatte dieses Problem, als ich der Datei kurz vor der von Form abgeleiteten Klasse eine weitere Klasse hinzufügte. Das Hinzufügen nach dem Beheben des Problems.
quelle
Der gleiche Fehler kann auch auftreten, wenn Sie eine neue Klasse in den Quellcode der Klasse eines vom Designer erstellten Formulars einfügen.
Diese neue Klasse kann entfernt und in einer anderen cs-Datei abgelegt werden.
(Zumindest in meinem Fall war dies das Problem ...)
quelle
Weil ich meine Webanwendung vorkompiliere (mithilfe der VS2012-Veröffentlichungsfunktion). Ich habe den obigen Fehler erhalten. Ich habe alle Vorschläge ausprobiert, aber die seltsame Änderung von "Build Action" in "Content" hat den Trick getan!
quelle
In meinem Fall habe ich eine Web-API mit Ressourcen und erstelle daraus ein Nuget-Paket. Wenn ich dieses Nuget in anderen Projekten verwende, stelle ich fest, dass ich, wenn ich eine API mit Ressourcen
MissingManifestResourceException
anfordere, nach ein wenig Nachforschungen erfahre, dass Nuget Packager Ressourcen nicht automatisch packt. Wenn Sie Ressourcendateien verwenden möchten, müssen Sie dies manuell tun. Daher müssen Sie Ihrer .nuspec-Datei folgende Zeilen hinzufügen: (Besuchen Sie https://github.com/NuGet/Home/issues/1482 )Bevor Sie jedoch Dateien hinzufügen, müssen Sie sicher sein, welche .net-Version Sie verwenden.
quelle
Ich hatte das mit einem neu erstellten F # -Projekt. Die Lösung bestand darin, das Kontrollkästchen "Standardressourcennamen verwenden" in den Projekteigenschaften -> Anwendung -> Ressourcen / Angeben, wie Anwendungsressourcen verwaltet werden sollen, zu deaktivieren. Wenn Sie das Kontrollkästchen nicht sehen, aktualisieren Sie Ihr Visual Studio! Ich habe 15.6.7 installiert. In 15.3.2 ist dieses Kontrollkästchen nicht vorhanden.
quelle
Nur um es zu erwähnen. Wenn Sie eine Konstante oder ein Literal verwenden, stellen Sie sicher, dass es sich auf eine Ressource des Formulars bezieht
ProjectName.Resources
und nicht enthältResources.resx
.Es könnte Ihnen ein oder zwei Stunden sparen.
quelle
Ich habe dieses Problem bei einem verwalteten C ++ - Projekt festgestellt, das auf WinForms basiert, nachdem der globale Namespace umbenannt wurde (nicht manuell, sondern mit dem Umbenennungstool von VS2017).
Die Lösung ist einfach, wird aber an keiner anderen Stelle erwähnt.
Sie müssen den
RootNamespace
Eintrag in der vcxproj-Datei so ändern , dass er mit dem C ++ - Namespace übereinstimmt.quelle
In meinem Fall war es ein Tippfehler in der Xaml eines Fensters, das über Winforms Form geöffnet wurde:
Falsch:
<Image Source="/Resources/WorkGreen.gif"/>
Richtig:
<Image Source="../Resources/WorkGreen.gif"/>
Es kann jemandem helfenquelle
Von der Microsoft-Support-Seite :
Geben Sie den Dateinamen der .resources-Datei an, wenn Sie Resgen.exe ausführen, um dieses Problem zu umgehen. Stellen Sie beim Angeben des Dateinamens der .resources-Datei sicher, dass der Dateiname mit dem Namespace-Namen Ihrer Anwendung beginnt. Führen Sie beispielsweise den folgenden Befehl an der Microsoft Visual Studio .NET-Eingabeaufforderung aus, um eine .resources-Datei zu erstellen, deren Namespace-Name Ihrer Anwendung am Anfang des Dateinamens steht:
quelle