2016-07-01 1 views
0

Considérons initialement le cas inverse. Si je veux énumérer tous mes types dans les assemblées que je l'ai fait référence dans mon application console je peux faireÉnumération des types dans l'application Console à partir d'une bibliothèque de classes

var assemblies = Directory.EnumerateFiles(
        Directory.GetCurrentDirectory(), 
        "MyNamespace.*.dll", 
        SearchOption.TopDirectoryOnly) 
       .Select(Assembly.LoadFrom) 
       .SelectMany(x => x.GetTypes()) 
       .ToList(); 

donc simple. Je dois faire l'opération inverse. En supposant que j'exécute une application de console et référence la bibliothèque de classes MyClassLibrary, je voudrais obtenir tous les types dans mon application de console à l'intérieur d'une fonction dans MyClassLibrary. Le problème est que les applications de la console ne produisent pas de fichiers dll et ne produisent que des fichiers exe. Est-il possible de lire les types?

+2

Bien sûr, si vous avez trouvé le bon fichier .exe, vous pouvez charger cet assemblage exactement de la même manière. –

+0

Je l'ai essayé, ça n'a pas fonctionné. J'ai essayé de lire les fichiers 'exe' à la place de' dll' mais il n'a pas été chargé dans mon tableau d'assemblage. – Arijoon

+1

Eh bien, il fonctionnera pour les exécutables .NET réels. Il ne parviendra pas à charger les exécutables non-NET. Vous devriez éditer votre question pour montrer ce que vous avez essayé, et ce qui s'est passé. Une alternative serait d'utiliser 'Assembly.GetEntryAssembly'. –

Répondre

0

Le fichier exe pour une application console .NET est toujours un ensemble de .NET. Il peut être chargé de la même manière, mais c'est un peu inutile car il est déjà chargé. Plutôt que de parcourir les fichiers, vous pouvez utiliser AppDomain.CurrentDomain.GetAssemblies() pour obtenir tous les assemblys chargés dans l'App Domain actuel (et dans une application console - sauf si vous en créez un autre - il n'y en aura qu'un).