簡體   English   中英

從繼承指定 class 的解決方案中獲取所有類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM