Я использую WiX на объекте ASP.net, который динамически включает все файлы веб-сайта и сценарии базы данных, которые запускаются во время установки.
Я извлекаю файлы из решения, используя задачу высокой температуры, вот так
<HeatDirectory
ToolPath="$(WixToolPath)"
Directory="$(WebRoot)"
GenerateGuidsNow="yes"
ComponentGroupName="MasterPlanWeb"
OutputFile="$(MSBuildProjectDirectory)\Setup\Product\Fragments\wwwfiles.wxs"
SuppressFragments="yes"
DirectoryRefId="WEBROOT"
KeepEmptyDirectories="yes"
PreprocessorVariable="var.WebRoot"
SuppressRegistry="yes"
SuppressRootDirectory="yes"
SuppressCom="yes" />
, а затем в моем основном сценарии wix на них ссылаются как
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="INSTALLLOCATION" Name="MasterPlan">
<Directory Id="WEBROOT" Name="wwwroot" />
<Directory Id="DATABASESRC" Name="databasesrc" />
</Directory>
</Directory>
Связь между этими двумя частями, если DirectoryRefId в первом фрагменте xml и Directory Id во второй.
Таким образом, структура решения непосредственно в моем каталоге HEATed копируется, как и я, однако я могу изменить корень.
Например, если я запускаю HEAT через c: \ mywebsite и этот каталог содержит
- \ people \
- \ счета \
- \ Сценарии \
эти подкаталоги будут включены.
Вторая часть позволяет мне установить корневой каталог во время установки, поэтому, если пользователь выберет c: \ test, в качестве каталога для установки будут созданы следующие каталоги (с их горячим содержимым)
- C: \ тест \ люди \
- C: \ Test \ счета \
- C: \ Test \ Scripts \
Если вы действительно хотите, чтобы подкаталоги помещали все свои данные, например, в корневой каталог, вы могли бы сделать цикл для каждой папки и выполнить одну и ту же команду, указав один и тот же DirectoryRefId для всех них.