找不到装配

时间:2012-09-19 07:37:55

标签: c# .net autofac

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

由于

1 个答案:

答案 0 :(得分:2)

您有几种选择:

  1. 在指向子文件夹的app.config中添加probing path。这仅在您尝试加载的程序集以某种方式在项目中引用时才有效。
  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);