Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 1045 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
Oracle Blob entpacken mit C-Sharp (4)

Frage von it4baer zum Thema Visual Studio ...

Datenbanken
gelöst SQL Abfrage mit Visual Studio (5)

Frage von specialuser zum Thema Datenbanken ...

IDE & Editoren
gelöst IDE für C-Sharp und C++ auf Windows (8)

Frage von Bugdroid zum Thema IDE & Editoren ...

Visual Studio
gelöst Visual Studio C-Sharp Word Add-In - Text zu Fußzeile hinzufügen (5)

Frage von mayho33 zum Thema Visual Studio ...

Neue Wissensbeiträge
Ubuntu

Ubuntu 17.10 steht zum Download bereit

(3)

Information von Frank zum Thema Ubuntu ...

Datenschutz

Autofahrer-Pranger - Bewertungsportal illegal

(8)

Information von BassFishFox zum Thema Datenschutz ...

Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

(8)

Information von thomasreischer zum Thema Windows 10 ...

Microsoft

Die neuen RSAT-Tools für Win10 1709 sind da

(2)

Information von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
Router & Routing
Allnet - VDSL2 Modem - SFP (mini-GBIC) (20)

Frage von Dobby zum Thema Router & Routing ...

Monitoring
Netzwerk-Monitoring Software (18)

Frage von Ghost108 zum Thema Monitoring ...

Windows 10
Seekrank bei Windows 10 (17)

Frage von zauberer123 zum Thema Windows 10 ...

Windows Server
gelöst Kopiervorgang schlägt fehl, weil Datei- und Ordnername zu lang sind (14)

Frage von Schroedi zum Thema Windows Server ...