XmlFile 要素を使用して、インストール中に XML ファイルに要素を追加しています。
<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 ロブの答えを少し説明するには、素敵な書式設定を使用できる場所で:
- XmlConfig 要素で Node="document" を設定して、ドキュメント フラグメントを追加します。
- 名前空間を明示的に設定する必要があります。そうしないと、デフォルトの名前空間が再び取得されます。
- また、「ドキュメント」を追加していますが、複数の要素を指定すると機能しないようです。不可解でまったく役に立たない「セットアップ ウィザードが途中で終了しました」という実行時エラーが発生します。
したがって、私の修正コードは次のようになります。
<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>