2012-12-02 13 views
5

Ok, ich fühle mich wie die Antwort auf meine Frage ist online, aber ich kann es nicht finden. Alles, was ich versuche, ist, dem Programm, das ich mit CodeDom kompiliere, eine Textressourcendatei hinzuzufügen und dann auf diese Textdatei im kompilierten Programm zuzugreifen. Um die eingebettete Ressource hinzufügen, ich den folgenden Code verwendet:Hinzufügen und Abrufen von eingebetteten Ressourcen codedom

 System.Resources.ResourceWriter writer = new System.Resources.ResourceWriter("Resources.resx"); 
     writer.AddResource("EoS.txt", Form1.MasterEncoder.GetBytes(Properties.Resources.Eos)); 
     writer.Generate(); 
     writer.Close(); 
     Parameters.EmbeddedResources.Add("Resources.resx"); 

Hier „Parameter“ ist mein Compiler Parameter Objekt und „Eos.txt“ ist die Datei, die ich zu schreiben bin versucht, das ist eine Ressource in der Anwendung. Dies wirft keinen Fehler, wenn ich das Programm bauen, aber wenn ich versuche, diese Textdatei in dem neu kompilierte Programm zu greifen diesen Code verwenden, die ich das Formularladeereignis hinzugefügt:

  _assembly = Assembly.GetExecutingAssembly(); 
     _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("Resources.EoS.txt")); 
     TextFile = _textStreamReader.ReadToEnd(); 

ich Dieser Fehler grob: "Wert kann nicht null sein Parametername: stream." Ich habe versucht, "Ressourcen" in den Namespace des Programms zu ändern und viele andere kleine Verbesserungen und nichts hat funktioniert. Ich bin mir nicht sicher, ob ich auf dem völlig falschen Track bin oder nicht, aber ich denke mein Problem ist bei CodeDom. Irgendwelche Vorschläge?

+0

Ermittelt der Fehler, in welcher Zeile er sich befindet? – FoolishSeth

+1

Nun, ich bin mir ziemlich sicher, dass es in der StreamReader-Zeile ist. – user1869878

+0

Entfernte "eingebettete" Markierung. Nicht verwandt mit Embedded Code/Systemen – Neowizard

Antwort

0

Es ist fast sicher aufgrund der unerwarteten Art und Weise die Ressourcennamen gebildet werden. Ein Trick, den ich benutze, wenn ich nicht die Spitze von meinem Kopf erinnern off, ist vorübergehend diese Codezeile hinzu:

string[] resourceNames = _assembly.GetManifestResourceNames(); 

einen Haltepunkt auf, und so erinnern mich an den richtigen Namen, dann kopieren das in den Code.

Verwandte Themen