[英]Get all types from Solution who inherit specify class
我想從繼承指定 class 的解決方案中獲取所有類型。 我的解決方案結構如下所示:
AssemblyTest (Solution)
|
- ProjectOne (Class Library)
- - BaseClass.cs (Class)
|
- ProjectTwo (Class Library)
- - FirstExampleClass.cs (Class inherit from BaseClass )
|
- ConsoleApp (Console Application)
- - SecondExampleClass.cs (Class inherit from BaseClass )
- - Program.cs (Class inherit from BaseClass )
在Program.cs
中,我想獲取所有繼承BaseClass
的類型。 為此,我使用代碼:
var typesList = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(p => p.GetTypes()
.Where(t => typeof(BaseClass)
.IsAssignableFrom(t) && !t.IsAbstract && t.IsPublic && t != typeof(BaseClass)));
但是在typesList
中,我從存在Program.cs
的同一個項目中只得到一個元素-> SecondExampleClass
。
基類.cs
public class BaseClass{}
FirstExampleClass.cs
public class FirstExampleClass : BaseClass{}
SecondExampleClass.cs
public class SecondExampleClass: BaseClass{}
PS ConsoleApp
項目有參考ProjectTwo
參考
這是因為程序集可能還沒有加載到當前的 AppDomain 中。
AppDomain.GetAssemblies()
為您提供所有已加載到當前 AppDomain 中的程序集。BuildManager.GetReferencedAssemblies()
(此方法僅在.Net Framework System.Web.dll中可用)返回從Web.config和其他地方引用的所有程序集的列表,並將這些程序集加載到當前的AppDomain中。
請參閱AppDomain.GetAssemblies 和 BuildManager.GetReferencedAssemblies 之間的區別
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.