我可以使用C#预处理器跳过Kinect v2.0代码吗?
快速提问,我正在开发一个小程序,我想使用Kinect版本1和2。如果我没有安装Kinect 2.0 sdk,是否可以使用预处理器命令使c#编译器跳过我的Kinect v2.0代码?(例如,当我在Windows 7上工作时)。基本上是这样的:我可以使用C#预处理器跳过Kinect v2.0代码吗?,c#,c-preprocessor,kinect,kinect-sdk,windowsversion,C#,C Preprocessor,Kinect,Kinect Sdk,Windowsversion,快速提问,我正在开发一个小程序,我想使用Kinect版本1和2。如果我没有安装Kinect 2.0 sdk,是否可以使用预处理器命令使c#编译器跳过我的Kinect v2.0代码?(例如,当我在Windows 7上工作时)。基本上是这样的: #if KINECT1 // ... kinect1 specifict code #endif #if KINECT2 // ... kinect2 specific code #endif 当然,您必须定义这些符号,编译器或框架中没有内置
#if KINECT1
// ... kinect1 specifict code
#endif
#if KINECT2
// ... kinect2 specific code
#endif
当然,您必须定义这些符号,编译器或框架中没有内置功能来检测哪个版本可用(如果有的话)
通过使用MSBuild,您可能能够检测到任何已安装的Kinect SDK(版本)。例如,查找本地驱动器上的特定注册表项、路径和/或设置环境变量,然后从项目文件中设置这些符号
例如,在.csproj
文件的顶部包含以下片段(或将其放入一个单独的文件中)
基本上是这样的:
#if KINECT1
// ... kinect1 specifict code
#endif
#if KINECT2
// ... kinect2 specific code
#endif
当然,您必须定义这些符号,编译器或框架中没有内置功能来检测哪个版本可用(如果有的话)
通过使用MSBuild,您可能能够检测到任何已安装的Kinect SDK(版本)。例如,查找本地驱动器上的特定注册表项、路径和/或设置环境变量,然后从项目文件中设置这些符号
例如,在.csproj
文件的顶部包含以下片段(或将其放入一个单独的文件中)
作为实施MSBuild解决方案的人员的参考:SDK确实创建了环境变量
KINECTSDK_DIR
(请参阅的“此版本中的更改”部分),路径类似于C:\Program Files\Microsoft SDK\Kinect\v1.0 Beta2
,应该允许您解析版本。哦,冷却设置KINECTSDK20\u DIR
。我无法在我所在的机器上安装SDK,因此无法进行检查。感谢这些家伙,我已经成功地让它工作了,不过需要注意的是,除非我在所有现有propertygroup下面和第一个item group上面添加propertygroup定义,否则这对我不起作用。我不确定这是否是因为标准csproj文件在定义调试、跟踪等时清除了现有常量,以供实施MSBuild解决方案的人员参考:SDK确实创建了环境变量KINECTSDK_DIR
(请参阅本版本中的“更改”部分),路径类似于C:\Program Files\Microsoft SDK\Kinect\v1.0 Beta2
,应该允许您解析版本。噢,酷,它设置Kinect SDK20\u DIR
。我无法在我所在的机器上安装SDK,因此无法进行检查。感谢这些家伙,我已经成功地让它工作了,不过需要注意的是,除非我在所有现有propertygroup下面和第一个item group上面添加propertygroup定义,否则这对我不起作用。我不确定这是否是因为标准csproj文件在定义调试、跟踪等时会清除现有常量。
<PropertyGroup Condition="'$(KINECTSDK10_DIR)' != '' and Exists('$(KINECTSDK10_DIR)')">
<DefineConstants>KINECT1;$(DefineConstants)</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(KINECTSDK20_DIR)' != '' and Exists('$(KINECTSDK20_DIR)')">
<DefineConstants>KINECT2;$(DefineConstants)</DefineConstants>
</PropertyGroup>