Могу ли я использовать препроцессор 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>