C#如何获得非系统程序集

dls*_*sou 1 c# assemblies

我需要实例化一个只在程序集或mscorlib中定义的对象,而不是在任何其他系统程序集中.目前我这样做:

Type type;
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly assembly in assemblies)
{
    string fullName = name + "," + assembly.FullName;
    type = Type.GetType(fullName);
    if (type != null) break;
}
if (type != null) 
    object obj = Activator.CreateInstance(type);
Run Code Online (Sandbox Code Playgroud)

有没有办法优化此循环以跳过系统程序集(但不是mscorlib)?我需要多次调用它.

谢谢!

Shi*_*mar 5

你可以尝试这样的事情:

  loadedAssemblies = (from assembly in AppDomain.CurrentDomain.GetAssemblies()
                   where
                     assembly.ManifestModule.Name != "<In Memory Module>"                         
                     && !assembly.FullName.StartsWith("System")
                     && !assembly.FullName.StartsWith("Microsoft")
                     && assembly.Location.IndexOf("App_Web") == -1
                     && assembly.Location.IndexOf("App_global") == -1
                     && assembly.FullName.IndexOf("CppCodeProvider") == -1
                     && assembly.FullName.IndexOf("WebMatrix") == -1
                     && assembly.FullName.IndexOf("SMDiagnostics") == -1
                     && !String.IsNullOrEmpty(assembly.Location)
                   select assembly).ToList();
Run Code Online (Sandbox Code Playgroud)

一旦你有"loadedAssemblies",你可以做你需要做的事情.

如果你多次调用它,那么将加载的程序集存储在一个变量中,这样你就不会每次查询,而只是遍历列表.