我们有一个使用 Autofac 的 Windows 服务,当我们尝试加载引用的程序集时,并非所有程序集都被列为我们在应用程序中任何地方都没有使用的某些包含对象,但我们需要包含接口实现。以下方法加载程序集:
private IEnumerable<Assembly> GetReferencedAssemblies(Assembly assembly)
{
var assemblyNames = assembly.GetReferencedAssemblies();
List<Assembly> assemblies = new List<Assembly>();
assemblies.Add(assembly);
foreach (var item in assemblyNames)
{
var loadedAssembly = System.Reflection.Assembly.Load(item.FullName);
assemblies.Add(loadedAssembly);
}
return assemblies;
}
如果我们对程序集中包含的对象进行虚拟引用,则它将加载程序集并由 autofac 构建类型,如果我们删除虚拟对象,则不再包含程序集。
有没有办法包含所有引用的程序集,无论您是否直接使用其中的对象(记住我们仍然需要它,因为接口实现在那里)。
这在 ASP.NET 上运行良好,因为它只加载 bin 中的所有 DLL。
如果您实际上没有引用程序集中的类型,编译器将删除该引用,因为它被认为是多余的。您需要使用手动将所需的程序集加载到AppDomain中Assembly.Load()
。如何确定要加载的程序集取决于您。您可以选择查看特定文件夹中的文件,也可以使用包含程序集名称的配置文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)