如何使用 .xdt 文件

How to use .xdt file

我已按照以下 post Nuget Config.Transform Formatting Issue 在 NuGet 中添加 web.config 文件条目。

我在我的 NuGet 包中使用了以下 xdt 文件

    <compilation>
        <assemblies>
            <add assembly="ASSEMBLY1, Version=1.0.10, Culture=neutral" xdt:Transform="Insert"/>
            <add assembly="ASSEMBLY2, Version=1.0.11, Culture=neutral" xdt:Transform="Insert"/>
            <add assembly="ASSEMBLY3, Version=1.0.12, Culture=neutral" xdt:Transform="Insert"/>
            <add assembly="ASSEMBLY4, Version=1.0.13, Culture=neutral" xdt:Transform="Insert"/>
        </assemblies>
    </compilation>
</system.web>

并且我已尝试安装此 NuGet,但出现以下错误。错误将转换应用到项目 'WebApplication60' 中的 'web.config' 时出错 源文档中没有元素匹配 '/configuration/system.web/compilation/assemblies/add' 0

因为在项目中找不到程序集节点。我试图将 xdt:Transform="Insert" 添加到程序集节点,但它会导致 web.config 文件中出现重复条目​​,如下所示

<assemblies>
                <add assembly="ASSEMBLY1, Version=1.0.10, Culture=neutral" xdt:Transform="Insert"/>
                <add assembly="ASSEMBLY2, Version=1.0.11, Culture=neutral" xdt:Transform="Insert"/>
                <add assembly="ASSEMBLY3, Version=1.0.12, Culture=neutral" xdt:Transform="Insert"/>
                <add assembly="ASSEMBLY4, Version=1.0.13, Culture=neutral" xdt:Transform="Insert"/>
<add assembly="ASSEMBLY1, Version=1.0.10, Culture=neutral" xdt:Transform="Insert"/>
                <add assembly="ASSEMBLY2, Version=1.0.11, Culture=neutral" xdt:Transform="Insert"/>
                <add assembly="ASSEMBLY3, Version=1.0.12, Culture=neutral" xdt:Transform="Insert"/>
                <add assembly="ASSEMBLY4, Version=1.0.13, Culture=neutral" xdt:Transform="Insert"/>
            </assemblies>

如何避免重复输入?

为避免插入重复的条目,您可以尝试先删除 assemblies 元素(如果有),然后插入一个新的元素,此后填充了 <add assembly=""/> 元素:

<compilation>
    <assemblies xdt:Transform="Remove"/>
    <assemblies xdt:Transform="Insert">
        <add assembly="ASSEMBLY1, Version=1.0.10, Culture=neutral"/>
        <add assembly="ASSEMBLY2, Version=1.0.11, Culture=neutral"/>
        <add assembly="ASSEMBLY3, Version=1.0.12, Culture=neutral"/>
        <add assembly="ASSEMBLY4, Version=1.0.13, Culture=neutral"/>
    </assemblies>
</compilation>

或者,您可以尝试使用 InsertIfMissing 转换插入 while 元素并避免重复,以防它已经存在:

<compilation>
    <assemblies xdt:Transform="InsertIfMissing">
        <add assembly="ASSEMBLY1, Version=1.0.10, Culture=neutral" 
             xdt:Transform="InsertIfMissing" xdt:Locator="Match(assembly)"/>
        <add assembly="ASSEMBLY2, Version=1.0.11, Culture=neutral"
             xdt:Transform="InsertIfMissing" xdt:Locator="Match(assembly)"/>
        <add assembly="ASSEMBLY3, Version=1.0.12, Culture=neutral"
             xdt:Transform="InsertIfMissing" xdt:Locator="Match(assembly)"/>
        <add assembly="ASSEMBLY4, Version=1.0.13, Culture=neutral"
             xdt:Transform="InsertIfMissing" xdt:Locator="Match(assembly)"/>
    </assemblies>
</compilation>