2010-07-23 69 views
15

在VC++中,我可以按CTRL + F7來編譯單個文件,或者右鍵單擊源文件進行編譯。 是否有可能在C#中編譯單個文件(或當前文件)?如何在c#中編譯一個文件?

我想例如知道我的當前文件是否有任何錯誤,而無需編譯所有內容。

+0

編譯單個程序集時,C#編譯器*非常快*,甚至包含大量代碼的程序集。你確定你真的被這個問題困擾嗎? – 2010-07-23 17:29:14

回答

6

不,這是不可能在C#中做到這一點。

與C++不同,C#文件無法自行合理編譯以確定它是否有任何錯誤。 C++通過#include語句實現了這一點,它允許.cpp文件理解可用類型的聲明。這些聲明定義了當前文件依賴的類型的結構,並允許編譯器確保它們按照規範使用。

此過程在C#中隱式處理。可用的聲明集合就是所有編譯文件中所有可以訪問的聲明的集合。無法以C++的方式轉發聲明依賴關係,因此無法確保它們在單個文件中正確使用。

+0

雖然理論上不能解析它所需的一切,並忽略除當前源文件中使用的類型之外的所有錯誤嗎?所以它只報告需要的。 – Winforms 2010-07-23 17:17:41

+0

@Winforms,爲什麼不按文件名編譯和排序錯誤列表並滾動到有問題的文件? – JaredPar 2010-07-23 17:19:03

+2

我想,當重構一大堆代碼時,雖然我只想看到該文件的錯誤,但我明白了你的觀點。自從轉移到C#後,我的一個煩惱就是其中一個。 – Winforms 2010-07-23 17:21:36

3

像ReSharper這樣的Visual Studio插件工具對於這種情況來說是非常好的投資。

ReSharper執行連續的後臺解決方案範圍代碼分析,並通過在代碼文件旁邊方便地顯示一個條來報告問題。\具有紅色\橙色線條的文檔滾動條表示任何有問題\錯誤的代碼行。所顯示的行是點擊能夠導航到有問題的線路,也有工具提示,詳細說明確切的問題是什麼:

http://www.jetbrains.com/resharper/features/code_analysis.html#Continuous_Code_Quality_Analysis

 
      http://www.jetbrains.com/resharper/features/screenshots/50/marker_bar.png 

的問題\警告,ReSharper的可檢查可配置(但它具有出色的配置),並且可以表示任何錯誤,這些錯誤會導致代碼不能編譯爲更微妙的問題,因爲它檢測到可能的空方法調用結果,該結果尚未明確檢查。

0

Shift-F6會編譯當前程序集,它是差不多你想要的。

+0

VS的哪個版本是這樣的?我試過Shift + F6,什麼都沒有發生。 – 2015-07-06 19:30:00

+0

這可能是2008年,因爲它是在2010年發佈。 – 2015-07-07 13:58:46

1

在命令行: %WINDIR%\ Microsoft.Net \框架\ V3.5 \ CSC.EXE /目標:庫File.cs

你可以合理地附加至該解決方案通過探險工具上下文菜單 - >外部工具

設置參數/目標:庫$(ItemPath)

類似的東西可能會做你想要什麼。儘管該文件不得不依賴項目中的其他文件或除了GAC中的引用二進制文件。

10

對於單cs文件編譯+運行:

  1. 在VS 2008中,進入 「工具」> 「外部工具」
  2. 點擊 「添加」
  3. 標題:運行CSC(或無論你想要什麼)
  4. 命令:C:\ Windows \ system32 \ cmd。EXE
  5. 參數:/ C C:\ WINDOWS \ Microsoft.NET \框架\ v3.5版本\ CSC.EXE /目標:winexe $(ItemPath)& & $(ItemFileName)
  6. 初始目錄:$(ItemDir)
  7. 檢查使用輸出窗口
  8. 應用+ OK
  9. 轉到工具,然後選擇「運行CSC」

如果這不起作用,驗證您的路徑,cmdcsc匹配。

+0

出色的工作。 此外,如果您使用的是Visual Studio 2010,請在步驟5中將** v3.5 **替換爲** v4.0.30319 **。 – 2014-08-08 03:17:17

0

是的,這是可能的。您可以使用命令提示符直接調用編譯器。即

  1. 創建單個文件 'hello.cs中'
  2. 打開Visual Studio命令提示符
  3. 導航到具有 'hello.cs中'
  4. 運行csc hello.cs
  5. 執行你的單個文件的目錄通過輸入hello.exe

這將至少告訴你單個文件是否編譯。你可以在這裏找到更多的信息:https://msdn.microsoft.com/en-us/library/78f4aasd.aspx