Я добавляю элементы в файл XML во время установки, используя элемент XmlFile:
<util:XmlFile Id="SetOracleDialectProperty"
Action="createElement"
ElementPath="//hibernate-configuration/session-factory"
Name="property"
Sequence="9"
File="[INSTALLLOCATION]Config\hibernate.config"
Value="NHibernate.Dialect.Oracle10gDialect"/>
Пустой файл, в который я пишу, выглядит так:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
</session-factory>
</hibernate-configuration>
После запуска установщика я получаю следующее:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property xmlns="">NHibernate.Dialect.Oracle10gDialect</property>
</session-factory>
</hibernate-configuration>
Проблема в том, что пустой атрибут xmlns переопределяет xmlns, указанный в корневом узле файла, поэтому элемент свойства неправильно распознается nhibernate.
Как установить значение, соответствующее корневому узлу, или удалить атрибут xmlns?
Я потратил некоторое время на поиск ответа, и самое близкое, что я нашел, это «делай то, что ты делал бы в MSXML», что мне не помогло, так как там не сказано, как это сделать в WiX (например, атрибут для использования в XmlFile).
EDIT
Чтобы немного объяснить ответ Роба, в месте, где я могу использовать хорошее форматирование:
- Вы добавляете фрагмент документа, устанавливая Node = "document" в элементе XmlConfig.
- Вы должны явно установить пространство имен, в противном случае вы снова получите значение по умолчанию.
- Кроме того, хотя вы добавляете «документ», он не работает, если вы указали более одного элемента. Вы получаете загадочную и совершенно бесполезную ошибку «Мастер установки преждевременно закончил» во время выполнения.
Итак, мой фиксированный код выглядит так:
<util:XmlConfig Id="MsSqlDialect"
Action="create"
ElementPath="//hibernate-configuration/session-factory"
File="[INSTALLLOCATION]Config\hibernate.config"
Node="document">
<![CDATA[
<property xmlns="urn:nhibernate-configuration-2.2" name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
]]>
</util:XmlConfig>