2012-07-22 71 views
1

我正在使用C#4.0。我如何強烈引用.exe文件?

我正在使用Microsoft.VisualStudio.TestTools.UnitTesting運行單元測試。

我的UnitTest項目測試另一個項目,比如ProjectA。項目A創建了這樣一個過程:

Process mplex = new Process(); 
psi = new ProcessStartInfo(); 
psi.CreateNoWindow = true; 
psi.UseShellExecute = false; 
psi.RedirectStandardError = true; 
psi.FileName = "cmd.exe"; 
psi.Arguments = "/C mplex omittedForBrevity"; 
mplex.StartInfo = psi; 
mplex.Start(); 

/* This is telling me: "'mplex' is not recognized 
* as an internal or external command, operable 
* program or batch file." */ 
var a = mplex.StandardError.ReadToEnd(); 

我放在「MPLex.exe」內的各種彬的,包括「AppDomain.CurrentDomain.BaseDirectory」(這是的\ bin \調試\文件夾我的單元測試項目)。

MPLex.exe基本上是Microsoft的GPLEX衍生產品,它是Flex/Lex的C#版本。當我在ProjectA中添加對MPLex.exe的引用並在Object瀏覽器中查看它時,我沒有看到任何看起來像Main的方法,或者與之連接的公共方法,否則我會這樣做而不是通過cmd調用它正如我上面所做的那樣。

我認爲發生了什麼是它正在進行單元測試,它不是搜索\ bin \ Debug \目錄。當我在非單元測試ProjectB中的Main方法中運行ProjectA中的相同代碼時,它工作正常。如果我能以某種方式強烈引用.exe,以便在需要時將它複製到任何地方,那麼我認爲我的問題將得到解決。我怎樣才能做到這一點?

編輯:

添加這個固定的,但就我所知,我可能剛分手別的尚未作出自己知道,但。

System.IO.Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); 
+0

你可以只添加一個引用mplex在測試項目中?此外,mstest不會運行bin外的測試,它會在運行之前複製到部署目錄。 – 2012-07-22 06:00:55

+0

我沒有在我的測試項目中添加對MPLex.exe的引用。然而,一旦我做到了,它仍然無法工作。我懷疑引用的DLL和EXE的不復制,除非編譯器/鏈接器/無論什麼決定,他們實際上*使用*。至少不要在本單元測試使用的\ out \ bin目錄下。 – 2012-07-22 06:38:33

回答

1

mstest不會運行你的單元測試。它將測試和引用的程序集複製到測試部署文件夾中,通常在解決方案目錄下的TestResults下。我有「單元」測試過類似的組件,並且始終需要使用部署功能,這很容易讓人頭疼,但這裏卻是如此。

首先,您的測試設置必須啓用部署。轉到testsettings文件並選擇部署選項卡並單擊啓用部署。根據解決方案的結構,您可以在這裏添加mplex文件。在我們的項目中,我不這樣做,因爲必要的文件通常在測試的源代碼控制樹之外,VS會投訴,如果是這種情況,請使用下面描述的文件鏈接。

您還可以將DeploymentItem屬性添加到特定的測試或測試類,並且只有在運行這些測試時纔會複製該文件。如果它是一個大型數據文件,並且您不希望一直進行復制,這會很有幫助。

如果必要的文件不在測試解決方案中,請在測試項目中添加必要的文件作爲鏈接,並將生成操作設置爲始終複製。然後添加到測試集中的已部署文件或使用DeploymentItem屬性。

1

該.exe是一個C#編譯的代碼,除了它有一個額外的頭描述代碼的入口點,它類似於一個DLL。

我做了以下步驟,它爲我工作。

1 - 創建一個靜態方法主要和非靜態方法

namespace TestConsole1 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      Console.Write("hello 1st"); 
     } 

     public void TestMethod2() 
     { 
      Console.Write("hello 2nd"); 
     } 
    } 
} 

2 exe文件 - 參考它在另一個類庫項目作爲項目引用和下面的代碼只是正常工作。

TestConsole1.Program prg = new TestConsole1.Program(); 

prg.TestMethod2(); 

我也試圖從「some.exe」到「some.dll」改變EXE名稱,然後在項目中引用它,也沒關係,它的工作。

+0

抱歉一些代碼標籤不工作! – Anand 2012-07-22 06:29:23

+0

就你的格式而言,它是「1」。 - 我將它改爲「1」,它似乎工作。我不想花時間搞一個更優雅的解決方案哈哈....事情是主要的方法是不公開的,或者我會做你剛做的事情。我(想)我需要以某種方式引用.exe,而不是一個方法或類。我想我需要什麼可能是鏈接器要知道它。 – 2012-07-22 06:35:14

1

在項目中引用.exe bin是一種不好的做法。我建議: -set您的環境路徑變量mplex -call mplex從路徑通過(即mplex爲您的ShellExecute參數命令行) 最好的方面在cmd