4

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>
4

2 に答える 2

2

これは数年後のことですが、他の誰かがこれに出くわした場合、本当の解決策はこれだと思います:

<util:XmlFile Id="SetOracleDialectProperty"
              Action="createElement"
              ElementPath="//hibernate-configuration/session-factory"
              Name="urn:nhibernate-configuration-2.2:property"
              Sequence="9"
              File="[INSTALLLOCATION]Config\hibernate.config"
              Value="NHibernate.Dialect.Oracle10gDialect"/>

変更は からName="property"-Name="urn:nhibernate-configuration-2.2:property"構成が書き込まれると、それがデフォルトの名前空間であることを認識するのと同じように表示されます。私はマニフェストファイルを調整するのと同じ問題を抱えていましたが、このアプローチはそれをソートしました。

于 2012-04-14T19:02:05.177 に答える
1

ここでの問題は、MSXMLが、createElementが常にデフォルトの名前空間を提供すると述べていることです(あなたが見ているように)。より複雑ですが、より強力なXmlConfigに切り替える必要があると思います。この場合、MSXMLに依存して作成するのではなく、ドキュメントフラグメントを使用して、正しい名前空間で要素全体を追加してみてください。

于 2009-08-27T01:00:52.827 に答える