Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

C Sharp (Visual Studio 2013)- embedded resourse aus anderem Assambly entpacken

Frage Entwicklung Visual Studio

Mitglied: mayho33

mayho33 (Level 2) - Jetzt verbinden

18.01.2015, aktualisiert 19.01.2015, 1024 Aufrufe, 4 Kommentare

Hallo @ All!

Ich hänge wider mal an einem Problem fest und hoffe auf eure KnowHow.

Wenn ich eine embedded resource entpacken will nutze ich immer diese Function:

01.
public string Extract(string fullPathPerNamespace, string destinationFullPath) 
02.
03.
            string toReturn = String.Empty; 
04.
            if (Directory.Exists(Path.GetDirectoryName(destinationFullPath))) 
05.
06.
                try 
07.
08.
                    Stream stream = GetType().Assembly.GetManifestResourceStream(fullPathPerNamespace); 
09.
                    byte[] bytes = new byte[(int)stream.Length]; 
10.
                    stream.Read(bytes, 0, bytes.Length); 
11.
                    File.WriteAllBytes(destinationFullPath, bytes); 
12.
                    toReturn = destinationFullPath; 
13.
14.
                catch (Exception e) 
15.
16.
                    MessageBox.Show(e.GetBaseException().Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
17.
18.
19.
            return toReturn; 
20.
        }
Das funktioniert super im eigenen Assambly. Aus Gründen der Wiederverwendbarkeit, Bequemlichkeit, usw. versuche ich gerade diese Function in eine DLL zu verpacken. Da funktionierts dann logischerweise nicht mehr und ich habe keine Ahnung wie ich das realisieren könnte, weil offensichtlich noch was fehlt.


Sachen wie...:
http://msdn.microsoft.com/de-at/library/aa984408%28v=vs.71%29.aspx
http://stackoverflow.com/questions/11377790/find-all-embedded-resources ...
...haben nicht das Ergebnis, das ich brauche.

Google gibt zwar viel her, bis jetzt aber leider nur Nieten (oder ich habe es falsch angewendet). Hat von euch jemand eine Idee?

Danke!

Grüße Mayho!

Mitglied: 114757
LÖSUNG 18.01.2015, aktualisiert 19.01.2015
Erst das andere Assembly laden und darauf die Methode .GetManifestResourceStream anwenden.
http://www.vb-helper.com/howto_net_reflection_load_resources.html

Gruß jodel32
Bitte warten ..
Mitglied: alaim89
LÖSUNG 18.01.2015, aktualisiert 19.01.2015
Ich glaube wenn du dem hier folgst
Bsp:
01.
using (var target = assembly.GetManifestResourceStream("MySql.Data.dll"))
bist du auf der sicheren Seite. Und wie schon @114757 sagt, zuvor das Assembly Laden.


Gruß alaim89
Bitte warten ..
Mitglied: mayho33
18.01.2015, aktualisiert 19.01.2015
Hi

Sorry, aber das funktioniert nicht. Der Stream ist immer null. Eventuell muss ich den Aufbau etwas genauer erklären:

Ich habe ein Forms-Project (meine exe) und ein DLL-Project. Beide sind nicht Teil ein und der selben Solution oder sonst irgendwie zusammenhängend und haben auch nicht den gleichen Namespace.
Bisher habe ich obige Function immer in meine Projekte eingebaut, wenn ich sie gebraucht habe. Wegen der Bequemlichkeit usw. will ich diese Function nun in einer DLL.
Wenn ich oben genannte Function in meinem Forms.Project ausführen funktioniert's wie es soll. die gewünschten embedded Resources werden wie gewünscht ins FileSystem kopiert.

Baue ich die gleiche Function nun in die DLL ein und referenziere im Forms-Project auf die DLL (unter Verweise) functioniert's nicht mehr.

Function habe ich nun derart angepasst dass ich das Assembly meiner EXE gleich als Parameter übergebe:

01.
public string Extract(Assembly assembly, string embeddedResourceFullPath, string destinationFullPath) 
02.
03.
    // führt zum gleichen Ergebnis: 
04.
    Assembly refAssembly = Assembly.LoadFrom(assembly.CodeBase); // ist geladen aber.... 
05.
    Assembly refAssembly = Assembly.Load(assembly.GetName().Name); // geht zwar aber.... 
06.
    Stream stream = refAssembly .GetType().Assembly.GetManifestResourceStream(embeddedResourceName); //  ....stream ist null 
07.
    //.... 
08.
}


Hast du ein Beispiel?


EDIT:

Habe den Fehler gefunden. Meine embedded Resource war nicht als "embedded" markiert. Ein paar kleine Änderungen im Code und schon macht die Methode was sie soll.

hier die Methode:
01.
public bool Extract(Assembly assembly, string embeddedResourceName, string destinationFullPath) 
02.
03.
            bool toReturn = false; 
04.
            if (Directory.Exists(Path.GetDirectoryName(destinationFullPath))) 
05.
06.
                Assembly newAssemblyInstance = Assembly.Load(assembly.GetName().Name); 
07.
                var nameSpace = String.Format("{0}.{1}", newAssemblyInstance.GetTypes().FirstOrDefault(t => t.Namespace.Length > 0).Namespace, embeddedResourceName); 
08.
                try 
09.
10.
                    using (Stream stream = assembly.GetManifestResourceStream(nameSpace)) 
11.
                    using (BinaryReader r = new BinaryReader(stream)) 
12.
                    using (FileStream fs = new FileStream(destinationFullPath, FileMode.CreateNew)) 
13.
                    using (BinaryWriter w = new BinaryWriter(fs)) 
14.
                        w.Write(r.ReadBytes((int)stream.Length)); 
15.
                    toReturn = true; 
16.
17.
                catch (Exception e) 
18.
19.
                    MessageBox.Show(e.GetBaseException().Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
20.
21.
 
22.
23.
            return toReturn; 
24.
        }
Danke für den Tipp mit Assembly.Load().

Grüße!

Mayho
Bitte warten ..
Mitglied: alaim89
20.01.2015 um 19:44 Uhr
Seher Nice,

freut mich das es geklappt hat !


Gruß


alaim89
Bitte warten ..
Ähnliche Inhalte
Visual Studio
Visual Studio 2017 - Offline-Installationsdateien updaten

Frage von Highend01 zum Thema Visual Studio ...

IDE & Editoren
gelöst Visual Studio 2017RC - Intellisense autocomplete? (2)

Frage von Highend01 zum Thema IDE & Editoren ...

Neue Wissensbeiträge
Google Android

Cyanogenmod alternative Downloadquelle

(2)

Tipp von Lochkartenstanzer zum Thema Google Android ...

Batch & Shell

Batch als Dienst bei Systemstart ohne Anmeldung ausführen

(5)

Tipp von tralveller zum Thema Batch & Shell ...

Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Heiß diskutierte Inhalte
Windows 7
gelöst Lokales Adminprofil defekt (25)

Frage von Yannosch zum Thema Windows 7 ...

Server
gelöst Wie erkennen, dass nur deutsche IPs Zugang zu einer Website haben? (22)

Frage von Coreknabe zum Thema Server ...

LAN, WAN, Wireless
gelöst Statische Routen mit ISC-DHCP Server für Android Devices (22)

Frage von terminator zum Thema LAN, WAN, Wireless ...

Exchange Server
gelöst Migration Exchange 2007 zu 2013 - Public Folder teilweise weg (16)

Frage von Andy1987 zum Thema Exchange Server ...