2016-10-02 127 views
-1

我有使用Visual Studio開發的這個相當簡單的控制檯應用程序。有了它,我已經整合了一個簡單的C#程序,使用「Developer Command Prompt for VS2015」我導航到我的目錄並運行「csc Program.cs」來編譯「Program.exe」文件。從那裏我可以輸入「Program ***」並傳遞一個文件名,如「Program file.asm」。無法從常規命令提示符編譯.cs文件,只有開發人員命令提示符?

一切都很完美。但是,我想從常規命令提示符運行此。當我爲VS2015開發人員命令提示符中編譯下面兩行輸出:

Microsoft (R) Visual C# Compiler version 1.3.1.60616 
Copyright (C) Microsoft Corporation. All rights reserved. 

而且,當我瀏覽我可以看到,在C:\ WINDOWS \ Microsoft.NET \框架我有一個文件夾選項:

  • 1.0.3705
  • V1.1.4322
  • V2.0.50727
  • 3.0
  • V3.5
  • v4.0.30319

當我這樣做:

C:\ WINDOWS \ Microsoft.NET \框架\ v3.5版本\ CSC.EXE C:\目錄... \ Program.cs的

輸出是:

微軟(R)的Visual C#2008編譯器版本3.5.30729.5420對Microsfot(R).NET Framework 3.5版 版權所有(C)微軟公司。版權所有。

c:\ Users \ directory ... \ Program.cs(5,24):error CS0234:類型或名稱空間名稱'Tasks'不存在於命名空間'System.Threading'中缺少程序集引用)

然後,我v4.0.30319嘗試:

C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ CSC.EXE C:\目錄... \程序.cs

輸出:

Microsoft(R)Visual C#編譯器版本4.6.1055.0用於C#5 版權(C)Microsoft COrporation。版權所有。 此編譯器作爲Microsoft(R).NET Framework的一部分提供,但僅支持C#5以上的語言版本,該版本不再是最新版本。對於支持C#編程語言的較新版本的編譯器,請參見http://go.microsoft.com/fwlink/?LinkID=533240 CSCD777AE6152014D6AAEC769E73B879B29.TMP:錯誤CS1567:生成Win32資源時出錯:訪問被拒絕。 wrning CS1610:無法刪除用於默認Win32資源的臨時文件'c:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ CSCD777AE6152014D6AAEC769E73B879B29.TMP' - 系統找不到指定的文件。

誰能幫我明白這是爲什麼所有工作罰款,開發商命令提示符,但未能定期命令提示符下,即使完全量化爲「CSC.EXE」的路徑?

+0

你經常命令提示符下,如果你在一個正常的命令提示符和開發的命令做'set'提示,你可以看到它設置了更多的環境變量,以及路徑 –

+0

你可以詳細說明'set'嗎?編輯:Nvm,我鍵入Set並立即看到。這裏有一個簡單的區別讓我的文件在cmd提示符下運行開發人員嗎? –

+0

轉到命令提示符,鍵入set,回車......它會告訴你在環境中設置了什麼。如果你想將它捕獲到一個文件中,請設置> a.txt –

回答

0

我想你在嘗試了很多事情,卻不知道發生了什麼。

我把一個簡單的C#程序放在一起,使用「Developer Command Prompt for VS2015」我導航到我的目錄並運行「csc Program.cs」來編譯「Program.exe」文件。

當您從此特定命令提示符運行C#編譯器時,它位於路徑中。要找出正在運行的確切命令,在UNIX上,我們使用一個名爲which的命令。您可以嘗試gnu-utils或cygwin,或者只是手動遍歷PATH(任何情況)變量中指定的所有目錄以找出問題中的csc.exe所在的確切路徑。這樣你就會知道編譯器的確切路徑是什麼。 修訂:您可以在Windows上使用where命令查找命令的完整路徑(感謝@ScottChamberlain)

C:\用戶\目錄... \的Program.cs(5,24 ):錯誤CS0234:類型或命名空間名稱「任務」並不在同一個提示的命名空間「的System.Threading」(是否缺少程序集引用)

運行csc.exe /?存在和看到所有的選項編譯器支持。其中之一是/r用於添加引用一個dll

當我這樣做:

C:\ WINDOWS \ Microsoft.NET \框架\ v3.5版本\ CSC.EXE C:\目錄下.. 。\ Program.cs

CSCD777AE6152014D6AAEC769E73B879B29.TMP:錯誤CS1567:生成Win32資源時出錯:訪問被拒絕。原因CS1610:無法刪除用於默認Win32資源的臨時文件'c:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ CSCD777AE6152014D6AAEC769E73B879B29.TMP' - 系統找不到指定的文件。

您可能想要在您的文件Program.cs的目錄中。通過這種方式,您可以對文件夾寫入權限以生成必要的輸出文件。您也可以使用/out選項來指定輸出文件名

誰能幫助我瞭解爲什麼這是開發人員命令提示符所有工作正常,但即使完全量化爲「CSC路徑失敗定期命令提示符。可執行程序」?

很可能是因爲PATH環境變量不同。 Visual Studio命令提示符在啓動命令提示符後設置一堆環境變量。通過在兩個終端上運行set命令並在其輸出中執行diff,您可以看到兩個提示之間的環境差異。毋庸置疑,某些環境變量將永遠是不同的,這不是由於VS.NET

而作爲@KeithNicholas在評論中提到過,你可以簡單地調用C:\Program Files (x86)\Microsoft Visual Studio *\Common7\Tools\VsDevCmd.bat設置如Visual Studio命令提示符

+0

in windows'其中csc.exe'會給你執行exe的路徑。 –

+0

@ScottChamberlain謝謝。不知道。我一直在unix上使用'where',但從來不知道它在Windows上工作 – Vikhram

+0

''echo%〜$ PATH:1'在一個批處理文件中將搜索路徑並列出找到的第一個文件名作爲唯一參數。包括全名即notepad.exe。 'batfile notepad.exe'將返回'C:\ Windows \ System32 \ notepad.exe'。 – 2016-10-03 03:03:07