Frage "AppDomain.CurrentDomain.GetAssemblies()" in Console bzw. WPF anwendung



  • Hallo Leute,

    ich habe 2 Anwendungen! Eimal eine Consolenanwendung und einmal eine WPF Awendung!
    Beide Anwendungen haben eine Unterverzeichnis "MyDir" in dem zusätzliche Aassemblies vorhanden sind!

    So wenn ich nun in meiner Consolen Anwendungin der main:

    var assemblies = AppDomain.CurrentDomain.GetAssemblies();
    

    bekomme ich alle Assemblies außer die aus dem Verzeichneis "MyDir"!

    Wenn ich nun in meiner WPF App in er MainWindow:

    public partial class MainWindow : Window
    	{
    		public MainWindow()
    		{
    
    			var assembliesA = AppDomain.CurrentDomain.GetAssemblies();
    
    			InitializeComponent();
    
    			var assembliesB = AppDomain.CurrentDomain.GetAssemblies();
    		}
    	}
    

    mache enthält "assembliesA" alle Assemblies des Execution Path ABER nach "InitializeComponent()" sind auch Plötzlich die Assemblies meiner "MyDir" vprhanden!?! Wieso is das so? Was passiert in "InitializeComponent()" dass es plötzlich auch die Assemblies die nicht im Executionpath sind zurückgibt? 😕

    Grund für meine Frage , ich will nämlich auch in der Konsolenanwendung die Assemblies meiner "MyDir" haben!!

    Grüßle



  • Hallo,

    der Aufruf von AppDomain.CurrentDomain.GetAssemblies liefert alle in der Anwendungsomain geladenen Assemblies zurück. Ich vermute mal, dass die Assemblies in MyDir erst während / nach dem Initialize-Component in die Anwendungsdomain geladen werden.

    Die .NET Runtime lädt Assemblies erst dann wenn der erste Zugriff auf einen Typen aus dieser stattfindet.



  • Danke für die Info:)

    Kann ich .NET Runtime nich zwingen dass die Assemblies bzw. Typen im Vorfeld geladen werden!? Komischerweiße funktioniet "Type.GetType(typeName)" auch nicht immer ,auch wenn ich die Assembly explitzt mit "LoadFrom" geladen hab!



  • Wenn du die Assembly manuell lädst musst du die Typen immer in direkter Abhängigkeit zur Assembly Abfragen, also mit dem AssemblyQualifiedName.

    Manuelles Erzwingen des Ladens von Assemblies ist nicht drin und aus meiner sicht auch nicht notwendig. Wofür brauchst du das? Die .NET Runtime weiß doch am besten, wann welche Assembly benötigt wird.



  • Naja ich hab eine Server/Client Anwendung!

    Und der Server Stellt dem Client spezielle Assemblies zur Verfügung! Bzw. der Client zieht sich dll, und speichert diese in einen SubFolder ab!

    Wenn ich nun die Dll direkt im execution-Verzeichnis speicher, dann geht

    Type.GetType("...");
    
    auch!
    
    Wenn nicht , muss ich diese erst [code="cs"]Assembly.LoadFrom(..);
    

    explizt laden, und ich bekomme

    AppDomain.CurrentDomain.GetAssemblies();
    

    auch die assemblies

    aber dann schlägt auch trozdem

    Type.GetType("...");
    

    fehl.. wobei es auch schon funktioniert hat...hmm

    naja ich muss mir das jetzt echt mal genauer anschaun 😃 😃 aber danke Dir;)= 👍


Anmelden zum Antworten