AlexXYZ
@AlexXYZ
O Keep Clear O

Как отловить место в программе, которое приводит к загрузке dll?

Всем привет.

Программа на C#, использую разделяемую библиотеку. По бизнеслогике эта библиотека не должна загрузиться раньше, чем будет передано управлением функции Main, т.к. в программе должна пройти начальная инициализация параметров. Но видимо какой-то класс выполняет её загрузку в топе. В итоге главная программа вылетает (выводится диалог, с небольшим текстом, но там кроме имени программы и времени "происшествия" ничего нет).
Есть ли возможность как-то выяснить, из-за какого места в программе или в в какой момент dotnet выполняет загрузку этой библиотеки?
dotnet 4.6.2, VS 2017. windows 8.1 / Server 2016.
Насколько я знаю, загрузка dll происходит по определённым правилам, а не сразу все скопом. (строгие/не строгие имена в данной задаче точно не влияют. Я пробовал пересобирать эту библиотеку по разному).

Update 1:
Почему речь идёт о Main:

5bc0821f5fd43525354501.png
  • Вопрос задан
  • 171 просмотр
Решения вопроса 1
AlexXYZ
@AlexXYZ Автор вопроса
O Keep Clear O
Проблема решена чисто философским путём. Попал пальцем в небо. Читая статью https://weblog.west-wind.com/posts/2012/Nov/03/Bac... (ещё от 2012 года!!!) обратил внимание на абзац:

5bc0996c71590022855047.png

И тут я повнимательнее глянул на код функции Main:

5bc09af1cff3b746046260.png

И тут у меня сложился этот пазл! Возникло предположение, что dot.net перед выполнением функции смотрит на тело функции и проверяет, а потребуются ли для этого кода загрузка библиотек? Идиотское предположение, но... почему бы не проверить. Вынес тело функции в отдельную функцию:

5bc09c2145b1b590354662.png

И теперь в функции Main библиотечный LongFile.AppendAllText метод не виден! И случилось ЧУДО! Программа нормально запустилась! Выходит от перестановки слагаемых результат меняется )))

Решено.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
VoidVolker
@VoidVolker Куратор тега C#
Dark side eye. А у нас печеньки! А у вас?
А как эта библиотека подключена? В ссылках или вручную? Если вручную - то оттуда же сразу можно перейти на все места, где оно используется. Если в ссылках - то смотреть, где используется и добавить там мониторинг. Самый простой способ - начать с мониторинга доступа к файловой системе.
https://docs.microsoft.com/en-us/sysinternals/down... - добавляете фильтры на: процесс - ваше приложение, тип события - файловая система, содержит - название dll файла.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы