我正在使用Autofac来动态加载程序集。只要程序集与执行程序集位于同一文件夹中,它就可以正常工作。
但是如果我想动态加载的程序集在子文件夹中,那么应用程序崩溃“无法加载文件或程序集......”
我知道,我可以将这些程序集放在GAC中,然后解决问题。但那不是我想要的......
这就是我正在做的......
var builder = new ContainerBuilder();
builder.RegisterApiControllers(AppDomain.CurrentDomain.GetAssemblies());
builder.RegisterModule(new ConfigurationSettingsReader());
builder.Register(c => c.ResolveNamed<IMyInterface>(myVersion));
以及一些配置:
autofac defaultAssembly="blah"
modules
module type="myVersionFile, blah"
modules
autofac
有关如何动态加载位于子文件夹中的程序集而不使用GAC的任何想法吗?
由于
答案 0 :(得分:2)
您有几种选择:
您可以通过其他方式指定要加载的程序集。例如,我总是通过路径和文件名掩码加载它们,即具有特定名称模式的特定文件夹中的所有程序集。例如,您可以使用与此类似的代码:
var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, subFolder);
var pattern = "YourProject.*.dll";
var assemblies = Directory.GetFiles(path, pattern).Select(Assembly.LoadFrom);
builder.RegisterApiControllers(assemblies);