Top-Themen

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, 1050 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
Frage von it4baerVisual Studio4 Kommentare

Hallo, gleich vorab ich nutze .net Frameword 4.5.2, verwende den Oracle.ManagedDataAccess.Client; (für Visual-Studio 2017) und verbinde mich mit einer ...

Visual Studio
Visual Studio C-Sharp Word Add-In - Text zu Fußzeile hinzufügen
gelöst Frage von mayho33Visual Studio5 Kommentare

Hallo @ All! Ich soll für einen Kunden ein Word 2010/2013 Add-In erstellen welches eine Fußzeile erstellt und mit ...

Visual Studio
Probleme mit Veröffentlichung von Visual Studio C-Sharp und MySQL-Projekt
gelöst Frage von 94erBromVisual Studio1 Kommentar

Hallo zusammen. Ich habe folgendes Problem: Ich habe ein C#-Projekt zum Bearbeiten einer lokalen MySQL-Datenbank erstellt. In Visual Studio ...

Pascal und Delphi
Konvertierung Delphi 7 Anwendung zu Visual C Sharp
Frage von icegetPascal und Delphi2 Kommentare

Hallo liebe Community, habe folgendes Problem: Ich muss eine Anwendung (Delphi 7) weiterentwickeln. Leider kann ich nur Visual C# ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 106 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 2 TagenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 TagenInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell20 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless9 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Windows Server
Ping auf einen bestimmten Server nicht möglich
gelöst Frage von a.thierWindows Server7 Kommentare

Hallo, ich habe folgendes Problem. srv-dc1: Ping srv-nav > geht Ping srv-exchange > geht nicht srv-exchange: Ping srv-dc1 > ...