Cant load eingebettete Ressource mit GetManifestResourceStream()
Ich bin einbetten einer binären Datei mit der /linkres: compiler-argument, aber wenn ich versuche es zu laden mit:
System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
string[] names = myAssembly.GetManifestResourceNames(); //it is really there by its name "shader.tkb"
Stream myStream = myAssembly.GetManifestResourceStream( names[0] );
dies führt zu einer
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'shader.tkb' or one of its dependencies. The system cannot find the file specified. ---> System.IO.FileNotFoundException: The system cannot find the file specified. (Exception from HRESULT: 0x80070002)
--- End of inner exception stack trace ---
at System.Reflection.RuntimeAssembly.GetResource(RuntimeAssembly assembly, String resourceName, UInt64& length, StackCrawlMarkHandle stackMark, Boolean skipSecurityCheck)
at System.Reflection.RuntimeAssembly.GetManifestResourceStream(String name, StackCrawlMark& stackMark, Boolean skipSecurityCheck)
at System.Reflection.RuntimeAssembly.GetManifestResourceStream(String name)
Was ist hier das problem?
InformationsquelleAutor der Frage clamp | 2013-05-24
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
1 - Die Datei, die build action sollte "Eingebettete Ressource".
2 - Man kann nicht einfach geben Sie den Namen der Ressource. Müssen Sie die gesamte Baugruppe Namen vor den Namen der Ressource
InformationsquelleAutor der Antwort Aseem Gautam
Projekt namespace können, müssen berücksichtigt werden:
Was für mich gearbeitet wurde:
Wo "Project_A" war "meine Projekte" namespace.
Wobei "FolderName" ist ein Ordner in meinen Projekten-Projektmappen-Explorer.
Wo "test.txt" ist ein eingebettete Ressource in "Ordnername" Ordner.
Wenn ich verwendet:
Würde ich in "Projekt A" anstelle von "Project_A" ?!?!?!?
InformationsquelleAutor der Antwort AORD
Könnten Sie GetManifestResourceNames() auf Ihre Assembly-Objekt, um die ganze Liste der Dateien (und Ihre Namen).
Ich weiß nicht warum, aber auf mein Projekt, ich soll nicht zählen der name des Unterordners. Nur der basename der Montage mit dem Dateinamen.
InformationsquelleAutor der Antwort Marco Guignard
Dieser link wird Ihnen helfen zu verstehen, wie Sie eingebettete Ressourcen. Die Lösung gegeben durch Aseem funktioniert nur, wenn der Assembly-name ist der gleiche wie der Standard-namespace des Projektes, wie bereits in der "Application" - Registerkarte des Eigenschaften des Projekts.
Was getan werden muss (auch wenn AssemblyName ist nicht das gleiche wie Standard-namespace des Projektes):
wo
fullResourceName
ist der vollständig qualifizierte name der eingebetteten Ressource, die Sie zugreifen möchten.Wenn die Ressource (hier
shader.tkb
) ist in den root-Ordner des Projektes, dannfullResourceName = "Default.Namespace.Of.Project.shader.tkb"
. Wenn die Ressource vorhanden ist, in einen Ordner namensResources
in deinem Projekt-Ordner, dannfullResourceName = "Default.Namespace.Of.Project.Resources.shader.tkb"
.InformationsquelleAutor der Antwort Suhas Pai