我是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>
所有想法都赞赏。谢谢!
答案 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部分,其唯一的父部分是配置元素本身,但是。 。 。