Wie kann ich eine Datei aus einer eingebetteten Ressource extrahieren und auf Festplatte speichern?
Ich versuche, den code zu kompilieren unter Verwendung von CSharpCodeProvider. Die Datei wird erfolgreich kompiliert, aber wenn ich auf die generierte EXE Datei, bekomme ich eine Fehlermeldung (Windows ist auf der Suche nach einer Lösung für dieses problem) und nichts passiert.
Wenn ich den code kompilieren unter Verwendung von CSharpCodeProvider, die ich Hinzugefügt habe, die MySql.Data.dll
als eingebettete Ressource-Datei mit dieser Zeile code:
if (provider.Supports(GeneratorSupport.Resources))
cp.EmbeddedResources.Add("MySql.Data.dll");
Die Datei ist erfolgreich eingebettet werden (da bemerkte ich die Größe der Datei erhöht).
Im folgenden code versuche ich zu extrahieren der eingebetteten DLL-Datei und speichern Sie es auf System32, aber der code unten funktioniert nicht aus irgendeinem Grund.
namespace ConsoleApplication1
{
class Program
{
public static void ExtractSaveResource(String filename, String location)
{
//Assembly assembly = Assembly.GetExecutingAssembly();
Assembly a = .Assembly.GetExecutingAssembly();
//Stream stream = assembly.GetManifestResourceStream("Installer.Properties.mydll.dll"); //or whatever
//string my_namespace = a.GetName().Name.ToString();
Stream resFilestream = a.GetManifestResourceStream(filename);
if (resFilestream != null)
{
BinaryReader br = new BinaryReader(resFilestream);
FileStream fs = new FileStream(location, FileMode.Create); //Say
BinaryWriter bw = new BinaryWriter(fs);
byte[] ba = new byte[resFilestream.Length];
resFilestream.Read(ba, 0, ba.Length);
bw.Write(ba);
br.Close();
bw.Close();
resFilestream.Close();
}
//this.Close();
}
static void Main(string[] args)
{
try
{
string systemDir = Environment.SystemDirectory;
ExtractSaveResource("MySql.Data.dll", systemDir);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadKey();
}
}
}
}
Wie kann ich extrahieren Sie die DLL-Datei eingebettet ist, als eine Ressource, und speichern Sie es in System32?
InformationsquelleAutor der Frage Rafik Bari | 2012-10-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde vorschlagen, tun Sie es leichter. Ich gehe davon aus, dass die Ressource existiert und die Datei schreibbar ist (das könnte zum Problem werden, wenn wir sprechen über die system-Verzeichnisse).
InformationsquelleAutor der Antwort Piotr Zierhoffer
Habe ich festgestellt, dass der einfachste Weg, dies zu tun ist die Verwendung
Properties.Resources
undFile
. Hier ist der code, den ich verwenden...Für Binäre Dateien:
File.WriteAllBytes(fileName, Properties.Resources.file);
Für Text-Dateien:
File.WriteAllText(fileName, Properties.Resources.file);
InformationsquelleAutor der Antwort Thomas Sapp
Ich habe mit diesem (getestet) - Methode:
OutputDir: Speicherort, wo Sie möchten, kopieren Sie die Ressource
ResourceLocation: Namespace (+ dirnames)
Dateien: Liste von Dateien innerhalb der resourcelocation, die Sie kopieren möchten.
InformationsquelleAutor der Antwort M ten Klooster
Dieser funktioniert perfekt!
Beispiel der Nutzung:
Wenn das immer noch nicht hilft, versuchen Sie dieses video heraus: https://www.youtube.com/watch?v=_61pLVH2qPk
InformationsquelleAutor der Antwort Diego Fortes
Versuchen Sie, Lesen Sie Ihre Ziel-assembly in ein
MemoryStream
und dann speichern in einenFileStream
wie folgt aus (bitte beachten Sie, dass dieser code ist nicht getestet):InformationsquelleAutor der Antwort Paul Aldred-Bann
Oder über eine extension-Methode...
InformationsquelleAutor der Antwort BillKrat