Могу ли я использовать препроцессор C#, чтобы пропустить код Kinect v2.0?

Быстрый вопрос, я разрабатываю небольшую программу, которую я хотел бы работать с версиями 1 и 2 Kinect. Можно ли использовать команду препроцессора, чтобы компилятор C# пропускал мой код Kinect v2.0, если у меня его нет? Kinect 2.0 SDK установлен? (Когда я работаю на Windows 7 например).

1 ответ

Решение

В основном, вот так:

#if KINECT1
   // ... kinect1 specifict code
#endif

#if KINECT2
   // ... kinect2 specific code
#endif

Конечно, вам нужно было бы определить эти символы вручную, в компиляторе или платформе нет встроенной возможности определить, какая версия доступна, если она вообще есть.

Возможно, вы сможете обнаружить любой установленный Kinect SDK (версия) с помощью MSBuild. Как, например, найдите конкретные разделы реестра, пути на локальных дисках и / или установите переменные среды, а затем установите эти символы из файлов вашего проекта.

Например, включите следующий фрагмент в верхней части вашего .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).

ОБНОВИТЬ

@ Скотт Чемберлен комментарий помог. На самом деле Kinect 1.0 SDK устанавливает KINECTSDK10_DIR переменная окружения и 2.0 SDK устанавливает KINECTSDK20_DIR переменная окружения.

Итак, вы можете сделать что-то вроде этого ( это может также помочь):

 <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>
Другие вопросы по тегам