我有一个包含4个项目的解决方案,这些项目以这种方式相互引用:
我想通过Project RoleCreator中的某个方法预先加载解决方案中所有项目的程序集,但是在这一行中Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
在断点值中,只显示来自projectUnify.ServiceInterface的程序集,而不是项目Unify.ServiceModel中的程序集,它也在项目RoleCreator中引用。我希望从解决方案中加载所有程序集!
答案 0 :(得分:1)
您可以使用此类代码:
public static void PreloadAssembly(Assembly assembly)
{
var references = assembly.GetReferencedAssemblies();
foreach (var assemblyName in references)
{
Assembly.Load(assemblyName);
}
}
然后
PreloadAssembly(typeof(TypeFromAssembly1).Assembly);
PreloadAssembly(typeof(TypeFromAssembly2).Assembly);
此次电话
AppDomain.CurrentDomain.GetAssemblies()
将返回已加载程序集的列表。如果您没有从某个程序集访问类型,那么AppDomain将不会加载它,并且它将不会出现在GetAssemblies调用中。 AppDomain为您使用的类型加载程序集。
另外一种方法是在这里描述 - how to load all assemblies from within your /bin directory。它只是从bin文件夹加载所有程序集
答案 1 :(得分:0)
如果是网络应用程序,您可以使用BuildManager.GetReferencedAssemblies
。以下是来自Autofac wiki的示例(虽然它来自Autofac并不相关):
var assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>();
这将强制将引用的程序集立即加载到AppDomain中,使其可用于模块扫描。