レポート モジュールの使用をサポートするいくつかのソフトウェアに取り組んでいます。基本的に、デフォルトですべてのレポートを出荷したくありません。不必要な膨張を作成するだけなので、実行時に動的に追加できる有効なモジュールの現在のexeとdllをチェックする効率的な方法を探しています。これまでのところ、AssemblyInfo でカスタム属性を設定して実験し、次のようにフラグとして使用しました。
private void GetReportModules() {
try {
var dlls = Directory.GetFiles(Directory.GetCurrentDirectory()).Where(x => Path.GetExtension(x) == ".dll" || Path.GetExtension(x) == ".exe");
dlls = dlls.OrderBy(x => Path.GetFullPath(x)).Where(x => {
try {
return null != System.Reflection.Assembly.LoadFrom(x);
} catch (Exception) {
Console.WriteLine("Skipping {0} - does not load using reflection.", Path.GetFileName(x));
return false;
}
});
foreach (var dll in dlls) {
System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFrom(dll);
object[] attributes = assembly.GetCustomAttributes(typeof(ReportNameAttribute), false);
if (attributes.Count() > 0) {
// dynamically include the assembly as a menu item
}
}
} catch (Exception ex) { throw new GenericException(ex); }
}
問題は、文字通りすべての dll と exe を 2 回ロードする必要があることです。これはあまり効率的ではないようです。以前にこれと同様のことを達成した方法や、私がやっていることを改善する方法を誰かが提案できますか?
最初にアセンブリをロードしなくても属性を確認できたら、本当に素晴らしいことです。