5

Autofac を使用している Windows サービスがあります。参照されているアセンブリを読み込もうとすると、アプリケーションのどこにも使用していないオブジェクトが含まれているため、すべてがリストされるわけではありませんが、インターフェイスの実装がそこにあり、含める必要があります。次のメソッドは、アセンブリを読み込みます。

private IEnumerable<Assembly> GetReferencedAssemblies(Assembly assembly)
{
  var assemblyNames = assembly.GetReferencedAssemblies();

  List<Assembly> assemblies = new List<Assembly>();
  assemblies.Add(assembly);
  foreach (var item in assemblyNames)
  {
    var loadedAssembly = System.Reflection.Assembly.Load(item.FullName);
    assemblies.Add(loadedAssembly);
  }

  return assemblies;
}

アセンブリに含まれるオブジェクトへのダミー参照を作成すると、アセンブリが読み込まれ、autofac によって型が構築されます。ダミー オブジェクトを削除すると、アセンブリは含まれなくなります。

そこにオブジェクトを直接使用しているかどうかに関係なく、参照されているすべてのアセンブリを含める方法はありますか (インターフェイスの実装がそこにあるため、まだ必要であることに注意してください)。

これは、ビン内のすべての DLL をロードするだけなので、ASP.NET では問題なく動作します。

4

1 に答える 1

1

アセンブリ内の型を実際に参照しない場合、コンパイラは冗長であると見なされるため、参照を削除します。を使用して、必要なアセンブリを AppDomain に手動で読み込む必要がありますAssembly.Load()。ロードするアセンブリをどのように決定するかは、ユーザー次第です。特定のフォルダー内のファイルを調べたり、アセンブリ名を含む構成ファイルを使用したりすることもできます。

于 2013-04-10T15:41:48.907 に答える