4

次のような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 ではまったく変更されていません。

4

2 に答える 2

5

答えは非常に簡単です。2 つのノードからデフォルトの名前空間宣言を削除するだけです。

この方法では、xml ノードで気の利いた Intellisense が失われますが、適切に変換されます。

于 2012-11-30T20:04:34.290 に答える
4

実際には、メインの 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>

参照:この記事

于 2016-04-05T16:11:52.200 に答える