【问题标题】:Can I use the C# preprocessor to skip Kinect v2.0 code?我可以使用 C# 预处理器跳过 Kinect v2.0 代码吗?
【发布时间】:2015-12-18 00:51:21
【问题描述】:

快速提问,我正在开发一个小程序,我想使用 Kinect 版本 1 和 2。是否有我可以使用的预处理器命令,以便 c# 编译器跳过我的 Kinect v2.0 代码没有安装 Kinect 2.0 sdk? (例如,当我在 Windows 7 上工作时)。

【问题讨论】:

    标签: c# c-preprocessor kinect kinect-sdk windowsversion


    【解决方案1】:

    基本上是这样的:

    #if KINECT1
       // ... kinect1 specifict code
    #endif
    
    #if KINECT2
       // ... kinect2 specific code
    #endif
    

    当然,您必须定义这些符号 manually,编译器或框架中没有内置功能来检测可用的版本(如果有的话)。

    您可以使用 MSBuild 检测任何已安装的 Kinect SDK(版本)。例如,查找特定的注册表项、本地驱动器上的路径和/或设置环境变量,然后从项目文件中设置这些符号。

    例如,在您的 .csproj 文件顶部包含以下片段(或将其放入您 <Import> 的单独文件中)。

     <PropertyGroup Condition="Exists('C:\Program Files\...\Whatever\v1.0')">
         <DefineConstants>KINECT1;$(DefineConstants)</DefineConstants>
     </PropertyGroup>
     <PropertyGroup Condition="Exists('C:\Program Files\...\Whatever\v2.0')">
         <DefineConstants>KINECT2;$(DefineConstants)</DefineConstants>
     </PropertyGroup>
    

    (请注意,以上只是一个示例,不知道什么是检测 kinect 版本的好“触发器”)。

    更新

    @Scott Chamberlain 的评论很有帮助。实际上,Kinect 1.0 SDK 设置了KINECTSDK10_DIR 环境变量,2.0 SDK 设置了KINECTSDK20_DIR 环境变量。

    所以,你可以这样做(this 也可能有帮助):

     <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>
    

    【讨论】:

    • 作为实现 MSBuild 解决方案的人的参考:SDK 确实创建了环境变量 KINECTSDK_DIR(请参阅 readme 的“此版本中的更改”部分),路径类似到C:\Program Files\Microsoft SDKs\Kinect\v1.0 Beta2,它应该允许你解析出版本。
    • 哦,很酷,它设置了KINECTSDK20_DIR。我无法在我所在的机器上安装 SDK,所以无法检查。
    • 感谢这些人,我已经设法让它工作了,但有几个注意事项,除非我添加了属性组定义下面,否则这对我不起作用现有的属性组和第一个项目组之上。我不确定这是否可能是因为标准 csproj 文件在定义 DEBUG、TRACE 等时会清除现有常量。
    猜你喜欢
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    相关资源
    最近更新 更多