我有一个类库和一个位于不同目录中的解决方案。
从 classlib 中,我调用 GetCallingAssembly,它从解决方案中返回可执行文件,然后调用 CallingAssembly.GetReferencedAssemblies 返回引用,现在我想执行优化以过滤掉引用并删除所有包引用,旨在找到某种类型。
注意:我不想依赖引用的 Name 属性。
...如果您只想查找从您的
AggregateRoot
类型派生的所有已加载程序集中的所有类型,而不搜索 不可能 包含子类的程序集,那么您需要的是:
public static IEnumerable<Type> GetAllTypesDerivedFromAggregateRoot()
{
Assembly[] asses = AppDomain.Current.GetAssemblies();
Type typeofRoot = typeof(AggregateRoot);
AssemblyName mustReferenceThisAssembly = typeofRoot.Assembly.GetName();
List<Assembly> candidates = asses
.Where( ass => ass
.GetReferencedAssemblies()
.Any( ra => AssemblyName.ReferenceMatches( reference: ra, definition: mustReferenceThisAssembly ) )
)
.ToList();
foreach( Assembly candidate in candidates )
{
Type[] types = candidate.GetTypes();
foreach( Type t in types )
{
if( typeofRoot.IsAssignableFrom( t ) ) yield return t;
}
}
}