web.config转换未应用于特殊部分

时间:2010-11-03 20:21:36

标签: nhibernate asp.net-mvc-2

我是web.config转换的新手,但让它适用于我的连接字符串。但是,我没有应用自定义部分(nhibernate)的变换。这是转换文件:

<?xml version="1.0"?>

<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
   <connectionStrings>
    <add name="ApplicationServices"
         connectionString="Data Source=.\SQLEXPRESS;Database=msmri_Users;UID=myuser;pwd=mypass;"
         providerName="System.Data.SqlClient" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>
  <appSettings>
    <add key="TableStorageEndpoint" value="http://127.0.0.1:10002/devstoreaccount1" xdt:Transform="Remove" xdt:Locator="Match(key)" />

  </appSettings>

...

  <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
      <property name="connection.connection_string" xdt:Transform="Replace" xdt:Locator="Match(name)">
        Data Source=.\SQLEXPRESS;Database=mydb;UID=myuser;pwd=mypass;
      </property>
    </session-factory>
  </hibernate-configuration>
</configuration>

所有想法都赞赏。谢谢!

2 个答案:

答案 0 :(得分:2)

诀窍是将xml名称空间添加到转换配置中。

以下是Web.config的示例设置:

<section name="hibernate-configuration"     
         type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
...
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
        ...
        <property name="show_sql">true</property>
        ...
    </session-factory>
</hibernate-configuration>

现在将xml命名空间添加到转换配置中。 (例如Web.Release.config):

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"
           xmlns:nhib="urn:nhibernate-configuration-2.2">
    ...
    <nhib:hibernate-configuration>
        <nhib:session-factory>
            <nhib:property name="show_sql" xdt:Locator="Match(name)" xdt:Transform="SetAttributes">false</nhib:property>
        </nhib:session-factory>
    </nhib:hibernate-configuration>

应该按照您现在想要的方式替换代码。

答案 1 :(得分:0)

嗯,这不适用于所有情况,但根据我上面的评论,如果真的不支持,我的解决方案是在connectionStrings下添加连接字符串并从hibernate配置部分引用它。然后,我的转换仍在其中一个默认配置部分中完成。仍然希望听到这不是一个真正的限制。

延迟更新:所以,这里的问题是包含xmlns属性的部分 - 配置转换将不处理这些。在某些情况下(例如,使用assemblyBinding部分),有一个包含元素的解决方法是在父元素上使用Transform =“Replace”,如下所示:

 <runtime xdt:Transform="Replace">
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <qualifyAssembly partialName="MySql.Data"
                     fullName="MySql.Data, Version=6.2.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
      </qualifyAssembly>
    </assemblyBinding>
  </runtime>

这仍然不适用于我的nhibernate部分,其唯一的父部分是配置元素本身,但是。 。 。