从 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()
获取当前应用程序域中所有加载的程序集(并且在控制台应用程序中 - 除非您创建另一个 - 将只有一个),而不是遍历文件。
首先让我们考虑相反的情况。如果我想枚举我在控制台应用程序中引用的程序集中的所有类型,我可以这样做
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()
获取当前应用程序域中所有加载的程序集(并且在控制台应用程序中 - 除非您创建另一个 - 将只有一个),而不是遍历文件。