2014-01-08 4 views
0

Предположим, я прочитал манифест для exe. Что-то вроде этого:Найти имя файла из манифеста Application Assembly

//Load Assembly 
obj_assembly = Assembly.LoadFile(m_strAssembly); 
//Return Referenced Assemblies 
return obj_assembly.GetReferencedAssemblies(); 

и я получаю объект сборки, как "{Tools, Version = 5.4.620.7, Culture = нейтрально, PublicKeyToken = NULL}", например. Как узнать, поступает ли он из «Tools.dll» или «Tools.exe»? Есть ли какое-либо свойство в объекте Assembly или какой-то трюк, который говорит, был ли он EXE или DLL?

ответ

1

Нет, сборки не имеют фиксированного расширения имени файла. Что-то вы можете увидеть с помощью Fuslogvw.exe (log all binds). Сначала вы увидите его .exe, а затем .dll.

Некоторые наблюдаемые побочные эффекты: вы можете добавить ссылку на EXE без проблем. Или вы можете произвольно переименовать сборку библиотеки классов из .dll в .exe, и она по-прежнему работает.

Здравый смысл - предположить, что тот, кто создал эту сборку, не потянул за трюки. Вы ожидаете, что эталонная сборка будет библиотекой классов и хранится в файле с именем tools.dll. Это достаточно хорошее приближение, поскольку на самом деле найти этот файл не так просто. Вам нужно будет воспроизвести правила поиска CLR, которые могут ужасно запутаться, вы недостаточно знаете об ограничениях перехвата и путях зондирования.

+0

Вы правы. Просто понял, что видел это в fuslogvw. Я предполагаю, что сделаю простой поиск, например, ищет .exe, а затем .dll. Надеюсь, они не потянут трюк, как tools.dll и tools.exe. Думаю, тогда я мог бы найти номер версии для соответствия и публикации/культуры, если они существуют. Хотел не делать что-то вроде этого ... О, хорошо ... Спасибо! – Denis

Смежные вопросы