次のようなWeb構成があります(重要なビットを表示するために切り捨てられています):
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
<section name="nhs-configuration" type="NHibernate.Search.Cfg.ConfigurationSectionHandler, NHibernate.Search" requirePermission="false" />
</configSections>
<nhs-configuration xmlns="urn:nhs-configuration-1.0">
<search-factory>
<property name="hibernate.search.default.directory_provider">NHibernate.Search.Store.FSDirectoryProvider, NHibernate.Search</property>
<property name="hibernate.search.default.indexBase">C:\files\FTIndex</property>
<property name="hibernate.search.default.indexing_strategy">event</property>
</search-factory>
</nhs-configuration>
<nlog
xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
internalLogFile="c:\temp\nlogInternal.log"
internalLogLevel="Info"
internalLogToConsole="true">
<targets>
<target
xsi:type="Database"
name="db"
keepConnection="false"
useTransactions="true"
connectionStringName="MyConnString"
dbProvider="Npgsql"
commandText="insert into logs (timestamp, thread, severity, source, message, exception, username) values (now(), :thread, :severity, :source, :message, :exception, :username);">
<parameter name="thread" layout="${threadid}" />
<parameter name="severity" layout="${uppercase:${level}}" />
<parameter name="source" layout="${logger}" />
<parameter name="message" layout="${message}" />
<parameter name="exception" layout="${exception:format=type,message,method:maxInnerExceptionLevel=10}" />
<parameter name="username" layout="${aspnet-user-identity}" />
</target>
<target xsi:type="Debugger" name="outputWindow" layout="${uppercase:${level}} ${aspnet-user-identity} ${message} ${exception:format=type,message,method:maxInnerExceptionLevel=10}"/>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="outputWindow" />
<logger name="*" minlevel="Debug" writeTo="db" />
</rules>
</nlog>
</configuration>
私の変換ファイルは次のようになります。
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<nhs-configuration>
<search-factory>
<property name="hibernate.search.default.indexBase" xdt:Locator="Match(name)" xdt:Transform="Replace">/var/ftindex</property>
</search-factory>
</nhs-configuration>
<nlog
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
internalLogFile="/var/log/nlogInternal.log"
internalLogLevel="Warn"
internalLogToConsole="false"
xdt:Transform="SetAttributes(internalLogFile,internalLogLevel,internalLogToConsole)">
<targets>
<target
name="db"
keepConnection="true"
useTransactions="false"
xdt:Locator="Match(name)"
xdt:Transform="SetAttributes(keepConnection,useTransactions)"
>
<parameter name="thread" layout="${threadid}" />
<parameter name="severity" layout="${uppercase:${level}}" />
<parameter name="source" layout="${logger}" />
<parameter name="message" layout="${message}" />
<parameter name="exception" layout="${exception:format=type,message,method:maxInnerExceptionLevel=10}" />
<parameter name="username" layout="${aspnet-user-identity}" />
</target>
<target name="outputWindow" xdt:Locator="Match(name)" xdt:Transform="Remove" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="db" />
<logger writeTo="outputWindow" xdt:Locator="Match(writeTo)" xdt:Transform="Remove" />
</rules>
</nlog>
</configuration>
これで、web.config ファイルのすべての部分が、公開時にこれら 2 つのセクションを除いて適切に変換されます。私の推測では、これはある種の xml 名前空間の競合と関係がありますが、まったく別のものである可能性があります。
これらのセクションが変形しないのはなぜですか? それらは完全に無視されており、公開された web.config ではまったく変更されていません。