2016-09-21 47 views
0

我有一個控制檯應用程序,用於從WS導入東西。C#:調用控制檯應用程序的方法

我真的很陌生,因此我有一個問題。

該項目包含一個名爲Importer.cs的類。這個類有一個名爲initialize()方法:

class Importer 
{ 
    static void Initialize() 
    { 
     //here i connect to the server etc. 
    } 
} 

現在我希望能夠調用我的應用程序,如:

Importer.exe Initialize 

所以應該調用初始化方法,然後我想能夠與去例如:

Importer.exe StartImport 

我已經與ARGS []參數工作,但現在我很堅持。

+0

你不能這樣做,但嘗試使用類庫項目,並將其輸出'dll'添加到引用 –

+0

您將不得不學習如何使用反射,因此您可以將字符串「Initialize」轉換爲MethodInfo對象。除了在完成之後知道如何使用Reflection之外,它不太可能是有用的練習。 –

回答

1

使用類似於CommandLineParser的庫,然後使用Reflection將這些方法作爲MethodInfo對象調用。

+0

我會試試這個。看起來很有趣 –

0

在您的控制檯應用程序中,查看您的解決方案資源管理器(在VS的右側窗口中顯示所有文件)。找到一個名爲PROGRAM.CS的程序。打開它,並期待這個:

static void Main(string[] args) 
    { 

    } 

內部的,把這個:

static void Main(string[] args) 
    { 
     //This starts a new instance of the Importer Class 
     Importer myImporter = new Importer(); 
     //This calls the Initialize Method within Importer 
     Importer.Initialize(); 
     //This calls the StartInput() Method within Importer 
     Importer.StartInput();  
     //Use Console.ReadLine() as the last line in this method to keep your screen open after program execution ends. 
     Console.ReadLine();  
    } 

的第一件事,您的控制檯應用程序在控制檯應用程序運行插件的Main()。

然後,您只需使用F5測試項目。測試完成後,生成項目並通過雙擊EXE文件運行。

0

根據你正在做什麼,這可能不工作。我想象一種情況,在Initialize()和之後的StartImport()之間,但是在這兩個調用之間,程序已經完成並且初始化狀態消失了。如果您沒有像Initialize()這樣的方法,而是使用原子子命令,那麼您的方法原則上是可行的。

但是出現了一個問題:這是否是通用的?我的意思是:說,你添加另一種方法。然後你想通過一個自動建立的子命令來訪問該方法,或者你不介意添加另一個子命令的情況嗎?第一個選項意味着,你需要對Reflection感到滿意。

現在,例如,您添加了方法,由於任何原因您不能聲明私有方法,但不希望它們作爲子命令公開。所以你需要跟蹤可見性。當然,這意味着糟糕的設計,但是如果你被遺留下來的組件,這可能會發生。

現在,讓我們假設您需要Initialize()(或類似的)命令。他們負責連接狀態或其他任何事情,程序仍然需要運行,當下一個子命令被調用時,它可以使用初始化的信息,句柄等。那麼設計你的控制檯應用程序會更有意義嗎?像殼?所以你會從Importer.exe開始,並得到子命令。

+1

我很確定這個人只是想知道如何在控制檯應用程序環境中運行他的類方法。他認爲他需要將它們作爲命令行參數傳遞 –

+0

當然,但我認爲他明白了這一點,這不是微不足道的,我的答案的實際意義在於,命令設計之後的這樣一個命令可能不適用於他正在嘗試做。 –

+0

阿門!乾杯! –