2017-01-02 2 views
2

Je suis récemment tombé sur le preapplicationstartmethod qui est là pour les applications asp.net. J'ai besoin de quelque chose comme ça pour les applications console. J'ai un dll de journalisation externe. Je veux configurer la journalisation de sorte qu'en référençant la DLL, un certain code de journalisation soit automatiquement exécuté. J'ai juste besoin d'appeler un constructeur de classe avant que tout autre code soit exécuté. Toute aide serait appréciée.Y at-il un moyen dans les applications de console C# pour exécuter automatiquement un morceau de code avant la fonction principale

Comme Application Insights collecte automatiquement les compteurs de perf sur l'ajout de référence à l'application mvc et l'ajout de la clé d'instrumentation au fichier de configuration. J'ai besoin de quelque chose comme ça pour les applications console.

+0

Vous pouvez utiliser des blocs statiques – Prabu

+0

Voir ici @Vasudha Gupta http://stackoverflow.com/questions/8459095/static-code-blocks – Prabu

+0

Pour être clair: vous voulez que votre dll d'enregistrement à quelque chose automatiquement exeucte lorsqu'il est chargé par un autre assemblage (comme votre application de console), sans avoir à ajouter de code supplémentaire à votre application de console? il semble que ce n'est pas si facile: voir http://stackoverflow.com/questions/8570999/hooking-into-an-onload-for-class-library et http://stackoverflow.com/questions/5365994/are-module- initialis-supported-in-silverlight-et-windows-phone-7 –

Répondre

5

Tout code initialiseur statique de la classe contenant Main sera exécutée avant l'entrée Main:

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

Demo.

+0

Implémenté ceci dans mon code. Merci ! –

0

Si vous recherchez juste un moyen d'exécuter du code avant d'entrer dans Main, dasblinkenlight déjà vous a donné une réponse. Mais si vous voulez que le code soit exécuté simplement en référençant une bibliothèque, je ne pense pas que ce soit possible du tout.

Le code de votre bibliothèque est uniquement exécuté lorsque quelque chose de la bibliothèque est utilisé, même des constructeurs statiques. Vous pouvez regarder l'heure à laquelle votre bibliothèque est chargée, si vous ajoutez des points d'arrêt, puis attendez l'exécution jusqu'à ce qu'ils deviennent entièrement rouges.

occasion supplémentaire:

Si vous ne voulez pas modifier le code de l'application, ajouter une application, qui appelle simplement votre code d'initialisation de l'enregistreur et après que le Main de votre demande initiale.

+0

N'y a-t-il pas moyen d'inclure une propriété dans le fichier app.config de l'application console pour appeler automatiquement du code de ma DLL de consignation sans apporter de modifications à la partie code de mon application console. –

+0

Comment les deux différentes parties du code ont-elles été exécutées? Séquentiel? Alors, qui vient en premier? Parallèle? Eh bien, il est beaucoup plus facile de décider ces questions dans le code juste après le début de votre application. –

+0

@VasudhaGupta Je ne connais aucun moyen de sécurité. Je peux imaginer beaucoup de solutions très moche, mais je ne vais pas recommander aucun d'entre eux :) – Luaan