2017-01-02 9 views
2

Недавно я натолкнулся на метод preapplicationstart, который есть для приложений asp.net. Мне нужно что-то подобное для консольных приложений. У меня есть внешняя протоколирующая DLL. Я хочу настроить ведение журнала таким образом, что при ссылке на DLL автоматически запускается некоторый код ведения журнала. Мне просто нужно вызвать конструктор класса перед выполнением любого другого кода. Любая помощь будет оценена по достоинству.Есть ли способ в консольных приложениях C# для автоматического запуска фрагмента кода перед основной функцией

Как приложение Insights автоматически собирает перфомансы при добавлении ссылки на приложение mvc и добавлении ключа к файлу конфигурации в файл конфигурации. Мне нужно что-то подобное для консольных приложений.

+0

Вы можете использовать статические блоки – Prabu

+0

Смотрите здесь @Vasudha Гупта http://stackoverflow.com/questions/8459095/static-code-blocks – Prabu

+0

Просто чтобы быть ясно: вы хотите, чтобы ваш длл каротаж автоматически exeucte что-то, когда он будет загружен другой сборкой (например, консольным приложением), без необходимости добавлять дополнительный код в консольное приложение? кажется, что это не так просто: см. http://stackoverflow.com/questions/8570999/hooking-into-an-onload-for-class-library и http://stackoverflow.com/questions/5365994/are-module- initializers-supported-in-silverlight-and-windows-phone-7 –

ответ

5

Любой код в статическом инициализаторе класса, содержащего Main будет выполняться перед входом Main:

public class MyConsoleApp { 
    static MyConsoleApp() { 
     Console.WriteLine("I run before Main"); 
    } 
    public static void Main(string[] args) { 
     Console.WriteLine("Main"); 
    } 
} 

Demo.

+0

Реализовано в моем коде. Благодаря ! –

0

Если вы просто искать способ выполнить код до ввода Main, dasblinkenlight уже дал вам ответ. Но если вы хотите, чтобы код выполнялся только путем ссылки на библиотеку, я не думаю, что это возможно вообще.

Код в вашей библиотеке выполняется только в том случае, если используется что-то из библиотеки, даже статические конструкторы. Вы можете посмотреть время загрузки вашей библиотеки, если вы добавите контрольные точки, а затем подождите, пока они не станут полностью красными.

Дополнительные возможности:

Если вы не хотите, чтобы изменить код приложения, добавить приложение, которое просто вызывает ваш регистратор код инициализации и после того, что Main вашего исходного приложения.

+0

Не может ли я включить какое-либо свойство в файле app.config консольного приложения, чтобы автоматически вызвать некоторый код моей logll dll без внесения изменений в часть кода моего консольного приложения. –

+0

Как должны выполняться две разные части кода? Последовательная? Итак, что на первом месте? Параллельно? Ну, гораздо легче решить эти вопросы в коде сразу после начала вашего приложения. –

+0

@ Васудха Гупта Не знаю, как безопасно. Я могу представить много очень уродливых решений, но я не буду рекомендовать никому из них :) – Luaan