WiX: Использование значений переменных в качестве части имени др. переменной

Автор Тема: WiX: Использование значений переменных в качестве части имени др. переменной  (Прочитано 6434 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Письмо "на деревню дедушке", но мало ли... :)

В составе WiX проекта присутствует, (упрощено для наглядности) такой фрагмент кода:
Код - XML [Выбрать]
  1. <?define var1="$(var.R172.TargetPath)" ?>
  2. <?define var2="$(var.R172.TargetDir)" ?>

Я бы хотел вместо жёсткого указания "R172" извлекать эту часть текста из переменной. Т.е. как-то так:

Код - XML [Выбрать]
  1. <?define info = R172 ?>
  2. <?define var1="$(var.info.TargetPath)" ?>
  3. <?define var2="$(var.info.TargetDir)" ?>

Т.е. мне бы хотелось, чтобы препроцессор обозначенный выше код преобразовал к тому виду, который был показан в первом фрагменте кода. Однако я получаю ошибку:
Цитировать
Undefined preprocessor variable $(var.info.TargetPath).

Такой вариант тоже не работает:
Код - XML [Выбрать]
  1. <?define var1="$(var.$(var.info).TargetPath)" ?>
  2. <?define var2="$(var.$(var.info).TargetDir)" ?>

Ок, тогда я пытаюсь провернуть это через конструкцию foreach:

Код - XML [Выбрать]
  1. <?foreach info in R172?>
  2. <?define var1="$(var.info.TargetPath)" ?>
  3. <?define var2="$(var.info.TargetDir)" ?>
  4. <?endforeach?>
или
Код - XML [Выбрать]
  1. <?foreach info in R172?>
  2. <?define var1="$(var.$(var.info).TargetPath)" ?>
  3. <?define var2="$(var.$(var.info).TargetDir)" ?>
  4. <?endforeach?>
Однако в результате по прежнему получаю ту же ошибку...

Т.е. применительно к написанию расширений под AutoCAD это можно было бы использовать, например, так:
Код - XML [Выбрать]
  1. <!-- The list of the names of referensed projects -->
  2. <?define ACAD_VERSIONS=R172;R182;R190?>
  3.  
  4. <?foreach ACAD in ACAD_VERSIONS?>
  5.   <Feature Id="Feature.$(var.ACAD)" Title="$(var.ACAD)" Level="1">
  6.     <Component Id="cmp$(var.ACAD)" Guid="*" Directory="INSTALLFOLDER">
  7.       <File Id="extension.$(var.ACAD).dll" Source="$(var.$(var.ACAD).TargetPath)"  KeyPath="yes"/>
  8.     </Component>
  9.     ...
  10.   </Feature>
  11. <?endforeach?>

Есть идеи на тему того, как можно было бы реализовать обозначенную в теме "хотелку"?
« Последнее редактирование: 07-06-2016, 16:34:06 от Андрей Бушман »

Отмечено как Решение Андрей Бушман 07-06-2016, 16:03:33

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Нашёл ответ: https://github.com/wixtoolset/issues/issues/4007
Т.е. обозначенная "фича" была востребована уже давно и не только мною.

Согласно последнему сообщению бота wixbot - функционал пока только запланирован к реализации в WiX 4. Я использую WiX 3.10.2.