Я пишу утилиту для себя, частично как упражнение по изучению C # Reflection, а частично потому, что я на самом деле хочу получить полученный инструмент для собственного использования.
То, что я ищу, - это нацеливание приложения на сборку и выбор заданного класса, из которого можно выбрать свойства, которые должны быть включены в экспортированную форму HTML в виде полей. Затем эта форма будет использоваться в моем приложении ASP.NET MVC как начало представления.
Поскольку я использую объекты Subsonic для приложений, в которых я хочу использовать, это должно быть разумно, и я решил, что, желая включить такие вещи, как разный вывод HTML в зависимости от типа данных, Reflection был способом сделать это .
Однако то, что я ищу, кажется неуловимым. Я пытаюсь взять DLL / EXE, выбранную через OpenFileDialog, в качестве отправной точки и загрузить ее:
String FilePath = Path.GetDirectoryName(FileName);
System.Reflection.Assembly o = System.Reflection.Assembly.LoadFile(FileName);
Это прекрасно работает, но поскольку объекты, генерируемые Subsonic, на самом деле полны типов объектов, определенных в Subsonic.dll и т. Д., Эти зависимые объекты не загружаются. Введите:
AssemblyName[] ReferencedAssemblies = o.GetReferencedAssemblies();
Это тоже содержит именно то, чего я ожидал бы. Однако я пытаюсь понять, как загрузить эти сборки, чтобы мое копание в мои объекты работало правильно. Я понимаю, что если бы эти сборки находились в GAC или в каталоге запущенного исполняемого файла, я мог бы просто загрузить их по их имени, но вряд ли это относится к этому варианту использования, и это мой основной вариант использования.
Итак, что сводится к тому, как мне загрузить данную сборку и все ее произвольные сборки, начиная с имени файла и получив в результате полностью просматриваемое отражение дерева типов, свойств, методов и т. Д.
Я знаю, что такие инструменты, как Reflector, делают это, но я просто не могу найти синтаксис для этого.