Web publishing warning: "No element in the source document matches ‘/configuration/hibernate-configuration’"

I created web.config transform that changes NHibernate configuration for Windows Azure projects. When building publishing package I get the following warning: "No element in the source document matches ‘/configuration/hibernate-configuration’" and transformed configuration doesn’t contain expected changes. In this posting I will show you how to solve this problem.

Problem

Here is NHibernate config from my original web.config file:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
 
<session-factory>
 
   
<property name="connection.provider">
 
        NHibernate.Connection.DriverConnectionProvider
   
</property>
 
   
<property name="connection.driver_class">
 
        NHibernate.Driver.SqlClientDriver
   
</property>
 
   
<property name="connection.connection_string">CONNSTR</property>
    <property name="dialect">
 
        NHibernate.Dialect.MsSql2005Dialect
   
</property>
 
   
<property name="show_sql">true</property>
 
 
</session-factory> 
</hibernate-configuration
>

And here is the transform that should replace connection string:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
 
<session-factory>
 
   
<property
 
       
xdt:Transform="Replace"
 
       
xdt:Locator="Match(name)"
 
       
name="connection.connection_string">
 
        CONNSTR
   
</property>
 
 
</session-factory> 
</hibernate-configuration
>

Warning is shown here:

Web.Cloud Debug.config(7,4): warning : No element in the source document matches ‘/configuration/hibernate-configuration’

Transformed Web.config using Web.Cloud Debug.config into obj\Cloud Debug\TransformWebConfig\transformed\Web.config.

Seems like transformer gets into trouble.

Solution

Solution is simple: we have to remove namespace from NHibernate configuration in web.config file like shown here:

<hibernate-configuration> 
 
<session-factory>
 
   
<property name="connection.provider">
 
        NHibernate.Connection.DriverConnectionProvider
   
</property>
 
   
<property name="connection.driver_class">
 
        NHibernate.Driver.SqlClientDriver
   
</property>
 
   
<property name="connection.connection_string">CONNSTR</property>
    <property name="dialect">
 
        NHibernate.Dialect.MsSql2005Dialect
   
</property>
 
   
<property name="show_sql">true</property>
 
 
</session-factory> 
</hibernate-configuration
>

Now the transform will be applied correctly and publishing package contains connection string given in web.config transform that is applied.

Gunnar Peipman

Gunnar Peipman is ASP.NET, Azure and SharePoint fan, Estonian Microsoft user group leader, blogger, conference speaker, teacher, and tech maniac. Since 2008 he is Microsoft MVP specialized on ASP.NET.

    Leave a Reply

    Your email address will not be published. Required fields are marked *