Entwickler-Ecke
Basistechnologien - Probleme mit Assembly.Load und dll
Mips - Sa 25.10.08 15:59
Titel: Probleme mit Assembly.Load und dll
Hallo zusammen,
ich versuche im Moment eine dll auf ihre enthaltenen Klasse zu untersuchen. Dies sollte mit
System.Reflection.Assembly kein Problem sein. Also habe ich dieses kleine Programm geschrieben.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| using System; using System.Collections.Generic; using System.Reflection; using System.Linq; using System.Text;
namespace Assemblys { class Program { static void Main(string[] args) { try { System.Reflection.Assembly plugin = System.Reflection.Assembly.Load("plugin.dll"); Type[] pclass = plugin.GetTypes();
foreach (Type p in pclass) { if (p.IsClass) Console.WriteLine(p.FullName + " is a plugin class in plugin.dll"); } } catch (Exception e) { Console.WriteLine(e.Message); System.Threading.Thread.Sleep(10); } finally { System.Threading.Thread.Sleep(10); } } } |
Und noch eine kleine dll erstellt um ds Programm zu testen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ClassLibrary1 { public class Class1 { public void StartUp() { Console.WriteLine("Hi I am a plugin!"); } } } |
Nun wenn ich die dll plugin.dll in das verzeichnis der exe kopiere und die exe ausführe, bekomme ich diesen Fehler:
Die Datei oder Assembly plugin.dll oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.
Erst dachte ich es würde an dem Pfad liegen und habe die plugin.dll in den Windows\System32 Ordner kopiert. Funktioniert immer noch nicht. Also einfach mal die mscorelib.dll per Load geladen und damit funktioniert es.
Hat einer von euch eine IDee woran es liegen kann?
Danke für jegliche Hilfe!
Mips
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
Kha - Sa 25.10.08 16:20
LoadFile dürfte es eher treffen:
| Zitat: |
To load assemblies dynamically, the Assembly class provides the following static methods (Shared methods in Visual Basic). Assemblies are loaded into the application domain where the load operation occurs.
The recommended way to load assemblies is to use the Load method, which identifies the assembly to be loaded by its display name (for example, "System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"). The search for the assembly follows the rules described in How the Runtime Locates Assemblies.
The ReflectionOnlyLoad and ReflectionOnlyLoadFrom methods enable you to load an assembly for reflection, but not for execution. For example, an assembly that targets a 64-bit platform can be examined by code that is running on a 32-bit platform.
The LoadFile and LoadFrom methods are provided for rare scenarios in which an assembly must be identified by path. |
PS: Es gibt schon einige mächtige Plugin-Frameworks, falls du das Rad nicht zweimal erfinden willst.
Mips - So 26.10.08 14:25
Hallo zusammen,
danke für die schnelle Antwort, LoadFile hat das Problem gelöst.
Danach bin ich heute auf ein ganz anderes Problem gestoßen zu dem ich bisher noch keine Antwort geunden habe und ich hoffe, dass ihr mir hier helfen könnt. Ich setzte VS.NET 2008 ein. Ich habe eine Projektmappe (solution) erstellt und in dieser Solution 3 Projekte.
Ein Projekt ist nur ein namespace (NR.DefinedInterface) , in dem ein interface enthalten ist.
Diesen Namespace möchte ich in den zwei anderen Projekten einbinden. Wenn ich jedoch nun den namespace einbinden möchte:
Quelltext
1:
| using NR.DefinedInterface; |
bekomme ich die Fehlermeldung:
Fehler 1 Der Typ- oder Namespacename "NR" konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Visual Studio 2008\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs 5 7 ConsoleApplication1
Leider finde ich im Netz auch keine Informationen. Muss ich irgendwo den Inlcude Pfad anpassen, ala gcc?
Ich wollte es gerne so machen, wie ich später in diesem Video sah:
http://www.johnkoerner.com/index.php?/archives/43-Creating-a-Plugin-Architecture-in-C.html
Kann mir einer von euch weiterhelfen. Wäre klasse, danke!
Mips
Christian S. - So 26.10.08 14:26
Hallo!
Bitte erstelle für eine neue Frage auch einen neuen Thread, damit man in einer Suche anhand des Titel erkennen kann, ob relevante Informationen enthalten sind. Danke! :-)
Grüße
Christian
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!