2014-01-22 3 views
1

Я могу использовать такие инструменты, как «dumpbin» и «dll export», чтобы видеть общедоступные точки входа («экспорт») стандартных DLL win32, таких как Windows \ SYSTEM32 \ GDI32.dll. Но когда я использую эти же инструменты на .Net DLL, я вижу что-то вродеКак я могу получить список публичного экспорта из. Net DLL?

2000 .reloc 
    2000 .rsrc 
    48000 .text 

У меня есть C# /. Net DLL, которая обеспечивает точки входа для управления производственного процесса, и я хочу, чтобы проверить его публичные точки входа в нашу документацию для обеспечения полноты публичной документации. Какой инструмент показывает публичные точки входа для DLL .Net?

Я пробовал Jetbrains DotPeek, который полностью декомпилирует нашу DLL в исходный код C#, но это слишком много, потому что он показывает ВСЕ и, похоже, не имеет сводного режима, когда он просто сообщает о публичных точках входа.

+0

Все общедоступные классы и интерфейсы с общедоступными методами и свойствами можно рассматривать как «публичный экспорт» сборки .NET. Следовательно, вы можете просмотреть его вручную с помощью некоторого декомпилятора (как вы уже это сделали) или попытаться написать код, используя Reflection, чтобы перечислить все такие методы. –

+0

Управляемые сборки не используют неуправляемый экспорт. Многие способы сделать это, здравомыслящий - написать модульные тесты. –

+0

Не знаете, как модульные тесты решают вопрос. Наша цель - убедиться, что, когда у пользователя есть наша DLL, все документированное все, что открыто открыто через DLL **. Очевидно, мы можем догадаться, что открыто видно, изучая исходный код или сборку, но это только предположение. Знание того, что предоставляет DLL, является эмпирическим тестом, или, по крайней мере, так мы это сделали с более старыми DLL-файлами Win32. Сборка и исходный код говорят нам, что ** должно быть ** общедоступным, я надеялся, что DLL может обеспечить двойную проверку того, что на самом деле, эмпирически ** ** открыто. – user316117

ответ

4

Я предполагаю, что «точки входа» вы имеете в виду «общественные классы и методы»

Как об использовании Visual Studio объекта браузера?

  1. Создать тестовый проект
  2. Добавить ссылку на DLL вы хотите, чтобы проверить.
  3. Двойной щелчок по ссылке, чтобы открыть браузер объекта
  4. Нажмите маленькую иконку «Gear» и снимите флажок «Показывать частных участников», «Показать защищенных членов», «Показать других пользователей», чтобы вы могли видеть только общедоступные вещи.
  5. Начало просмотра.
2

Подобно тому, как отправной точкой только, как перечислить все открытые типы из текущей сборки и список всех открытых методов из них:

Assembly assembly = Assembly.GetExecutingAssembly(); 
var exports = 
assembly.GetExportedTypes() 
     .SelectMany(type => type.GetMethods(BindingFlags.Instance | BindingFlags.Public) 
           .Select(member => new 
           { 
            type.FullName, 
            Member = member.ToString() 
           })) 
     .ToList(); 

Но это опускает вложенные классы, свойства и должно быть, вероятно, продлен в несколько способов удовлетворить потребности.

+0

С более старыми DLL-файлами Win32, изучающими экспорт в таком инструменте, как dumpbin, была предоставлена ​​эмпирическая двойная проверка того, что рассматривается в исходном коде и других файлах в среде компиляции и сборки. – user316117

+0

Как я уже сказал в этом вопросе, в случае программирования на основе компонентов нет места идее «двойной проверки». –

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