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, 997 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 ..
Neuester Wissensbeitrag
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Ähnliche Inhalte
Visual Studio
gelöst Ein VBScript in Visual Studio 2013 als Windows Forms Anwendung anwenden (2)

Frage von Knuefi zum Thema Visual Studio ...

Visual Studio
Microsoft Visual Studio kommt für macOS (1)

Link von Frank zum Thema Visual Studio ...

Windows Tools
gelöst Visual Studio 2010 Ultimate Download? (6)

Frage von Herbrich19 zum Thema Windows Tools ...

Visual Studio
gelöst Probleme mit Android Entwicklung in Visual Studio (3)

Frage von Pr0m3th3us zum Thema Visual Studio ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

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

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...