从 class 库枚举控制台应用程序中的类型

Enumerate through types in Console application from a class library

首先让我们考虑相反的情况。如果我想枚举我在控制台应用程序中引用的程序集中的所有类型,我可以这样做

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

所以直截了当。我需要做反向操作。假设我是 运行 一个控制台应用程序并引用 class 库 MyClassLibrary,我想在 MyClassLibrary 中的函数中获取控制台应用程序中的所有类型。问题是控制台应用程序不生成 dll 个文件,它们只输出 exe 个文件。有没有办法读取类型?

你可以使用 Assembly.GetEntryAssembly

Assembly.GetEntryAssembly().GetTypes();

.NET 控制台应用程序的 exe 文件仍然是 .NET 程序集。也可以用同样的方式加载,但是已经加载了,所以有点无意义。

您可以使用 AppDomain.CurrentDomain.GetAssemblies() 获取当前应用程序域中所有加载的程序集(并且在控制台应用程序中 - 除非您创建另一个 - 将只有一个),而不是遍历文件。