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 に答える