WIX util:xmlfile Имя файла является атрибутом источника
Я перехожу от Wise Installer к WIX и использую util:xmlfile для обновления файла конфигурации xml.
Это работает.
<Component Id="config" Guid="*">
<File Id="config" Source="..\Source\Desktop\prodconfig.xml" KeyPath="yes" Vital="yes" />
<util:XmlFile
Id="_PORT_" File="[INSTALLDIR]prodconfig.xml"
Action="setValue"
Name="Port" Value="[PORT]"
ElementPath="//Configuration/CommConnectionPools/CommConnectionPool"
Sequence='1' />
</File>
</Component>
Это не работает.
<Component Id="config" Guid="*">
<File Id="config" Source="..\Source\Desktop\prod-config.xml" KeyPath="yes" Vital="yes" />
<util:XmlFile
Id="_PORT_" File="[INSTALLDIR]prod-config.xml"
Action="setValue"
Name="Port" Value="[PORT]"
ElementPath="//Configuration/CommConnectionPools/CommConnectionPool"
Sequence='1' />
</File>
</Component>
Когда MSI выполняется с первым компонентом, все в порядке. Во второй версии возвращается ошибка "Ошибка 25531. Не удалось открыть файл XML..."
Насколько я могу судить, единственная разница - это дефис в имени файла.
Любые предложения относительно того, в чем может быть разница?
2 ответа
Попробуйте использовать идентификатор компонента вместо жесткого кодирования имени
[#config] //which will refer to the File Id
вместо
[INSTALLDIR]prod-config.xml
Значение для File
атрибут для util:XmlFile
тег должен относиться к Id
атрибут для File
тег.
В вашем случае это будет
<Component Id="config" Guid="*">
<File Id="config" Source="..\Source\Desktop\prod-config.xml" KeyPath="yes" Vital="yes" />
<util:XmlFile
Id="_PORT_" File="[#config]"
Action="setValue"
Name="Port" Value="[PORT]"
ElementPath="//Configuration/CommConnectionPools/CommConnectionPool"
Sequence='1' />
</File>
</Component>
В вашем примере, так как вы используете один и тот же идентификатор для обоих Component
тег и File
пометить это не имеет значения. Но в целом вам нужно использовать идентификатор для File
тег.
Чтобы уточнить, если ваш пример использовал configComponent
а также configFile
соответственно для Component
а также File
идентификаторы. Это будет выглядеть следующим образом:
<Component Id="configComponent" Guid="*">
<File Id="configFile" Source="..\Source\Desktop\prod-config.xml" />
<util:XmlFile
Id="_PORT_" File="[#configFile]"
[snip]
/>
</File>
</Component>