【问题标题】:C# preprocessor directive ignored in Visusal Studio 2010 Express?Visual Studio 2010 Express 中忽略了 C# 预处理器指令?
【发布时间】:2011-10-27 01:16:41
【问题描述】:

我从codeProject下载了一段代码。

#if 预处理器指令似乎没有像我预期的那样工作。

我没有在MyProject >> Properties >> Build Tab >> Conditional compiler symbols中定义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 是否需要明确“未定义”?还是我遗漏了其他一些基本概念?

【问题讨论】:

  • 查看#if DSHOWNET 语句中的代码——它是灰色的,还是有正常的语法着色?
  • @slugster,语法着色表明 else 之后的语句被忽略了。 shelleybutterfly 下载了代码,发现 DSHOWNET 是在解决方案中的另一个项目中定义的。感谢您对语法着色的提示,这在将来会有用。

标签: c# c-preprocessor visual-studio-express


【解决方案1】:

我下载了示例抓取器项目并将其放在我的系统上。 (我使用的是 Enterprise VS。)我打开了CaptureTest-2005 解决方案,将其转换为 VS2010 解决方案,然后加载它。加载 CaptureTest-2005 解决方案后,我仍然看到文件与您看到的问题相同。

所以,我发现虽然CaptureTest-2005 项目没有在构建页面上定义DSHOWNET,但DirectX.Capture-2005 项目却有。因此,对于DirectX.Capture-2005 中的所有文件,DSHOWNET 指令评估为真,因此 #if DSHOWNET 指令中的项目正在处理中。

我不确定解决方案是否只需要您构建和使用 CodeProject 下载的 DSHOWNET 部分(例如,我不确定是否需要 DirectX.Capture)但我想,因为 DirectX.Capture项目已定义,您将必须构建并使用该程序集来运行项目。 (可能有办法解决它,我还没有深入。我建议检查项目页面,看看是否有关于什么取决于什么的信息。)

希望这会有所帮助!

【讨论】:

  • 感谢您如此深入地研究!
  • 微软在 VisualStudion 的快速版本中做了一些“有趣”的事情。在 IDE、Project Properties、Build 选项卡中,条件编译符号为空白。但是,如果您使用 notepad++ 打开 .csproj 文件,则会有一个定义常量的 xml 行 DEBUG;TRACE;VS2003;DSHOWNET
  • 这很“有趣” :) 你可以在connect.microsoft.com/VisualStudio 提交错误报告;我找不到与此相关的错误报告,因此这个特定的 .csproj 可能有些特殊。
猜你喜欢
  • 2012-08-29
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多