2012-09-19 109 views
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?

感谢

回答

2

您有几种选择:

  1. 添加probing path到你的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); 
    
相关问题