保留名称空间前缀的转换

neo*_*pir 5 nlog xdt-transform visual-studio-2012

我正在尝试使用此 XDT 部分将 NLog 自定义配置部分插入到我的 Web.config 中:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" throwExceptions="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xdt:Transform="InsertIfMissing" >
    <targets>
        <target xsi:type="File" name="logfile" fileName="H:\testLog.txt" layout="${longdate} ${uppercase:${level}} ${message}" />
    </targets>
    <rules>
        <logger name="*" minlevel="Trace" writeTo="logfile" />
    </rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)

当我运行 XDT 转换时,我的 Web.Debug.config 包含:

<nlog throwExceptions="true" xmlns="http://www.nlog-project.org/schemas/NLog.xsd">
    <targets>
        <target d4p1:type="File" name="logfile" fileName="H:\testLog.txt" layout="${longdate} ${uppercase:${level}} ${message}" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance" />
    </targets>
    <rules>
        <logger name="*" minlevel="Trace" writeTo="logfile" />
    </rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)

通常,命名空间前缀是任意的,因此将 xsi 转换为 d4p1 不会导致任何问题。

但是,当我使用d4p1. 手动更改实例d4p1xsi解决问题,但如果用户之后需要手动更改文件,它会破坏配置转换的效用。

有没有办法使用 XDT 保留名称空间前缀?

cen*_*cru 3

我们有完全相同的问题。我不确定为什么它突然开始在特定项目中发生,但我们的解决方案是将 xsi 命名空间添加到原始配置文件(即转换所处理的基本文件)的顶层。所以...

<configuration>
Run Code Online (Sandbox Code Playgroud)

... 会成为...

<configuration xmlns:xsi="http://www.nlog-project.org/schemas/NLog.xsd">
Run Code Online (Sandbox Code Playgroud)

这成功了。

另一种可行的方法是将转换应用于 nlog 元素的子元素。

希望对某人有帮助。

  • 这似乎不对。`xsi` 命名空间应该是 `"http://www.w3.org/2001/XMLSchema-instance"`。 (2认同)