Быстрый вопрос, я разрабатываю небольшую программу, с которой я хотел бы работать с версиями 1 и 2 Kinect. Есть ли команда препроцессора, которую я могу использовать, чтобы компилятор C# пропускал мой код Kinect v2.0, Установлен ли Kinect 2.0 sdk? (Например, когда я работаю над Windows 7).Могу ли я использовать препроцессор C# для пропуска кода Kinect v2.0?
ответ
В принципе, как это:
#if KINECT1
// ... kinect1 specifict code
#endif
#if KINECT2
// ... kinect2 specific code
#endif
Конечно, вы должны определить эти символы manually, нет встроенной возможности в компиляторе или рамки для обнаружения, какая версия доступна, если вообще.
Возможно, вы обнаружили любой установленный 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).
UPDATE
@Scott Чемберлен комментарий помог. На самом деле Kinect 1.0 SDK устанавливает переменную окружения KINECTSDK10_DIR
, а 2.0 SDK устанавливает переменную envrionment 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>
Как FYI людям, реализующих решение MSBuild: В SDK действительно создает переменные окружения 'KINECTSDK_DIR' (см" Изменения в этом выпуске "[readme] (http://www.microsoft.com/en-us/kinectforwindows/develop/readme.htm)), этот путь похож на' C: \ Program Files \ Microsoft SDK \ Kinect \ v1.0 Beta2', который должен позволить вам разобрать версию. –
О, круто это наборы 'KINECTSDK20_DIR'. Я не могу установить SDK на машине, на которой я был, поэтому я не мог проверить. –
Спасибо, ребята, мне удалось заставить это работать, пару заметок, хотя это НЕ МОЖЕТ работать для меня, если я не добавлю определения группы свойств _below_ всех существующих групп свойств и над первой группой элементов. Я не уверен, может ли это быть из-за того, что стандартный файл csproj очищает существующие константы, когда он определяет DEBUG, TRACE и т. Д. – Wiredchop