Вы можете проверить во время выполнения, какие сборки загружены (поскольку каждый проект является сборкой) с помощью AppDomain.CurrentDomain.GetAssemblies()
.Вы можете добавить атрибут ко всем сборкам, а затем отфильтровать список сборок, чтобы он содержал только сборки с этим атрибутом.Это даст вам список всех ваших текущих (во время выполнения) загруженных сборок.
--- Изменить, чтобы ответить на комментарий ---
Следующий код является быстрым примером того, как этоможет выглядеть так:
Объявление атрибута (должно быть в «основном» проекте):
[AttributeUsage(AttributeTargets.Assembly)]
public sealed class ReportPluginAttribute : Attribute { }
Установить атрибут для проектов, которые вы хотите найти (Properties / AssemblyInfo.cs будетбудь хорошим местом):
[assembly: ReportPluginAttribute()]
Теперь вы можете проверить эти сборки:
var reportPlugins = AppDomain.CurrentDomain
.GetAssemblies()
.Where(a => a.GetCustomAttributes(typeof(ReportPluginAttribute), false).Any())
foreach (reportPluginAssembly in reportPlugins)
LoadReport(reportPluginAssembly.GetName().Name+".rdlc");
Я не совсем уверен, что должна делать ваша функция LoadReport
.Можно ли использовать все эти предположительно специфичные для проекта отчеты одним методом?Если они должны быть загружены кодом изнутри плагина, вы можете расширить Атрибут для переноса информации, какой класс использовать для загрузки отчета.