2017-01-02 55 views
2

我最近遇到的應用程序啓動方法是有asp.net應用程序。我需要這樣的控制檯應用程序。我有一個外部日誌記錄DLL。我想配置日誌記錄,以便在引用dll時,會自動執行一些日誌記錄代碼。我只需要在任何其他代碼執行之前調用一個類構造函數。任何幫助,將不勝感激。有沒有辦法在C#控制檯應用程序自動運行一段代碼之前,主要功能

與應用程序類似Insights自動收集有關添加對mvc應用程序的引用並將儀器密鑰添加到配置文件的perf計數器。我需要這樣的控制檯應用程序。

+0

你可以使用靜態塊 – Prabu

+0

請看這裏@Vasudha Gupta http://stackoverflow.com/questions/8459095/static-code-blocks – Prabu

+0

只是要清楚:你想你的日誌記錄dll自動執行時,它是加載通過另一個程序集(如您的控制檯應用程序),_而不必添加任何額外的code_到您的控制檯應用程序?它似乎並不那麼容易:請參閱http://stackoverflow.com/questions/8570999/hooking-into-an-onload-for-class-library和http://stackoverflow.com/questions/5365994/are-module-初始化程序-support-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文件中包含一些屬性,以自動調用我的日誌記錄DLL的一些代碼,而不更改我的控制檯應用程序的代碼部分。 –

+0

兩條不同的代碼應該如何執行?順序?那麼首先呢?平行?那麼,在你的應用程序開始之後,用代碼來確定這些問題就容易多了。 –

+0

@VasudhaGupta我知道沒有安全的方式。我可以想象很多非常醜陋的解決方案,但我不會推薦任何這些:) – Luaan

相關問題