2011-08-15 110 views
4

我有一段代碼從codeProject下載。Visusal Studio 2010 Express中忽略C#預處理器指令?

#if預處理器指令看起來不像我預期的那樣工作。

我還沒有定義在My​​Project的DSHOWNET >>屬性>>構建標籤>>條件編譯符號(對話框爲空)

在下面的代碼,錯誤DShowNET找不到顯示項目建成時。由於DSHOWNET從未被定義,所以我很驚訝'使用DShowNET'被處理。

using System; 
using System.Collections; 
using System.Runtime.InteropServices; 
#if DSHOWNET 
using DShowNET; 
using DShowNET.Device; 
#else 
#if VS2003 
#else 
using System.Runtime.InteropServices.ComTypes; 
#endif 
using DirectShowLib; 
#endif 

#if預處理器指令是否在Visual Studio Express版本中工作? DSHOWNET是否需要明確地「未定義」?還是我錯過了其他一些基本概念?

+3

看看'#if DSHOWNET '聲明裏面的代碼 - 它是灰色的還是它有正常的語法着色? – slugster

+0

@slugster,語法着色表明else之後的語句被忽略。 shelleybutterfly下載了代碼,發現DSHOWNET WAS在解決方案的另一個項目中定義。感謝提示語法着色,這將在未來有用。 – DarwinIcesurfer

回答

5

我下載了樣品採集器項目,並將其放在我的系統上。 (我正在使用Enterprise VS.)我打開了CaptureTest-2005解決方案,將其轉換爲VS2010解決方案並加載。在加載CaptureTest-2005解決方案時,我仍然看到與您看到的問題相同的文件。

因此,我發現,雖然CaptureTest-2005項目沒有在生成頁面上定義的DSHOWNET,但DirectX.Capture-2005項目的確做到了。因此,對於DirectX.Capture-2005中的所有文件,DSHOWNET指令的計算結果爲true,因此正在處理#if DSHOWNET指令中的項目。

我不知道該解決方案是否只是需要你建立和使用CodeProject上下載的DSHOWNET一部分(例如我不知道DirectX.Capture是否是必需的),但我想,因爲DirectX.Capture項目已爲其定義,您將不得不構建並使用該程序集來運行該項目。 (可能有一個方法,我沒有深入到它,我會建議檢查項目頁面,看看是否有什麼取決於什麼的信息。)

希望這會有所幫助!

+0

謝謝你深入挖掘這個! – DarwinIcesurfer

+0

非常歡迎,很高興爲您服務! :) – shelleybutterfly

+0

Microsoft在VisualStudion的快速版本中做了一些「有趣」的事情。在IDE,項目屬性,生成選項卡中,條件編譯符號爲空。但是,如果使用notepad ++打開.csproj文件,則會有一個定義常量的xml行 DEBUG; TRACE; VS2003; DSHOWNET! – DarwinIcesurfer