2014-10-13 3 views
0

Существует ли программный способ определения того, когда была загружена сама сборка?Проверьте, была ли сборка загружена

Я знаю, как проверить загруженные сборки из исполняющей сборки, но я хочу сделать это из «внутри» сборки, которая будет загружена.

Этот способ я мог определить, что приложение (которое использует загруженную сборку) было запущено, но класс из моей загруженной сборки не был создан или пока не был вызван метод.

+0

[C# Проверьте, загружена ли сборка] (https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=c % 23% 20check% 20if% 20an% 20assembly% 20is% 20loaded) – MethodMan

+0

@DJKRAZE OP говорит, что они знают, как это сделать, и ищут другой подход. – Michael

+4

Интуитивно это не представляется возможным. Вы просите собрание спросить: «Я был загружен?» - но для этого сборка должна быть загружена в контекст, где она может быть выполнена. – Michael

ответ

5

Что вы ищете, это функция, вызываемая при загрузке модуля/сборки. В мире pre -.NET это была функция DllMain. Соответствующая функция существует в .NET, но по какой-либо причине вы не можете ее создать на C# или VB.NET только в C++/CLI. Он называется конструктором модулей. Вы можете манипулировать своей сборкой, чтобы внедрить такой конструктор модуля. Поэтому всякий раз, когда сборка загружается, эта функция вызывается изнутри сборки перед дальнейшим доступом к этой сборке. Как это сделать объясняется здесь: http://einaregilsson.com/module-initializers-in-csharp/

+1

+1. Обратите внимание, что просто загрузка сборки не гарантирует, что конструктор модуля будет работать. (http://blogs.msdn.com/b/junfeng/archive/2005/11/19/494914.aspx) –

+0

Спасибо за отзыв. Я действительно не понимаю, почему MS вводит такую ​​полезную функцию, но скрывает информацию об этом и возможность ее использования. – Fratyx

+0

Fratyx, для чего бы вы его использовали? (возможность случайного фрагмента кода для запуска в почти произвольный момент времени в контексте безопасности, который в данный момент не установлен, никогда не делал меня счастливым ... но хорошее место для практической шутки на следующем разработчике, я думаю:) ...) –

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