У меня есть несколько небольших консольных приложений, которые наследуются от общего BaseExe
. Независимо каждый работает правильно, как ожидалось. Мне нужно предоставить доступ к этим приложениям через центральное местоположение для выполнения.
Моя идея в этом небольшом веб-приложении, которое предоставляет пользователям список всех доступных исполняемых файлов, которые могут быть выполнены. В настоящее время я использую файл web.config
, чтобы определить мои параметры. Однако я хочу, чтобы это было более динамичным, поскольку этот список будет расти. Я подумал, что, возможно, можно использовать отражение, чтобы определить тип исполняемого файла из каталога сервера и на основе того, что доступно, сгенерировать список из них. Как минимум, информация, которая мне нужна для создания этого списка, составляет
- Путь exe (который у меня есть)
- Имя и описание (что мне нужно получить)
Все исполняемые файлы имеют одинаковые зависимости и находятся в одном каталоге сервера.
По сути, моя попытка была
- Получить список exe-файлов из каталога сервера
- проверьте тип каждого exe, используя
Assembly.LoadFile
- получить значения
Name
и Description
для exe
Я могу как-то обойти второй шаг в том, что я могу проверить, что результат GetReferencedAssemblies
содержит сборку типа BaseExe
. Однако последняя часть полностью уклоняется от меня.
var path = @"C:\Code\ESG Server\ExeOutput\bin\debug";
string[] filePaths = Directory.GetFiles(path, "*.exe");
foreach (var exeReport in filePaths)
{
Assembly exe = Assembly.LoadFile(exeReport);
var exeType = exe.GetType();
var referencedAssemblies = exe.GetReferencedAssemblies();
}
Как проверить базовый тип консольных приложений на c #?
Упрощенные exes
public class exe1 : BaseExe
{
public exe1 ()
{
this.Name = "exe1";
this.Description = "exe1";
}
static void Main(string[] args){
var exe1 = new exe1();
/* snip */
}
}
public class exe2 : BaseExe
{
public exe2 ()
{
this.Name = "exe2";
this.Description = "exe2";
}
static void Main(string[] args){
var exe2 = new exe2();
/* snip */
}
}
Редактировать: Я только что понял после ввода всего этого, что свойства Name
и Description
установлены в конструкторе. Мой нынешний подход не сработает. Я собираюсь изучить пользовательские атрибуты в качестве альтернативы и использовать это для хранения информации. Требование остается прежним.