如果所有程序集都有一个共同的前缀(如果您有一个或多或少唯一的前缀),一个常见的解决方案是按名称过滤程序集。
var foo = AppDomain.CurrentDomain.GetAssemblies()
.Where(a=>a.FullName.StartsWith("MyProject."));
如果您只对某些特定类型感兴趣,请考虑为您的类使用attributes,甚至在汇编级别添加一个。
示例:
创建一个属性:
[AttributeUsage(AttributeTargets.Assembly)]
public class MyAssemblyAttribute : Attribute { }
将以下内容添加到您的 AssemblyInfo.cs:
[assembly: MyAssemblyAttribute()]
并过滤您正在查看的程序集:
var foo = AppDomain.CurrentDomain
.GetAssemblies()
.Where(a => a.GetCustomAttributes(typeof(MyAssemblyAttribute), false).Any());
您还会发现at this question 很有趣。在one answer 中建议检查每个程序集的完全限定名称,但这很繁琐,例如:
//add more .Net BCL names as necessary
var systemNames = new HashSet<string>
{
"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
...
};
var isSystemType = systemNames.Contains(objToTest.GetType().Assembly.FullName);
标记您的程序集(按名称或属性)总是比尝试识别哪些是 .Net 框架的一部分更容易。