[英]web.config transforms in alternate namespaces
我有一個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文件的所有部分在發布時都會正確轉換。 我的預感是這與某種xml命名空間沖突有關,但它可能完全是我想的其他東西。
為什么這些部分不會改變? 它們被完全忽略,最終在已發布的web.config中完全沒有變化。
事實證明答案很簡單:只需從兩個節點中刪除默認的名稱空間聲明。
通過這種方式,您在xml節點上丟失了漂亮的Intellisense,但它可以正常轉換。
實際上,您可以在主Web.Config中保留Intellisense,並只顯式地命名轉換文件以匹配:
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xmlns:nlog="http://www.nlog-project.org/schemas/NLog.xsd">
<nlog:nlog xdt:Transform="Replace">
//Body omitted for brevity
</nlog:nlog>
</configuration>
見: 本文
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.