我需要实例化一个只在程序集或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)?我需要多次调用它.
谢谢!
你可以尝试这样的事情:
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",你可以做你需要做的事情.
如果你多次调用它,那么将加载的程序集存储在一个变量中,这样你就不会每次查询,而只是遍历列表.