2

我正在使用 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 的程序集的任何想法?

谢谢

4

1 回答 1

2

你有几个选择:

  1. 探测路径添加到指向子文件夹的 app.config。这仅在您尝试加载的程序集在您的项目中以某种方式引用时才有效。
  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);
    
于 2012-09-19T07:44:59.043 回答