Visual studio 在Nuget Web.config.install.xdt中插入缺失将替换现有值

Visual studio 在Nuget Web.config.install.xdt中插入缺失将替换现有值,visual-studio,nuget,Visual Studio,Nuget,我在Web.config.install.xdt中有一个带有以下转换的Nuget包 初始安装后,使用者将条的属性值更改为ie 我的问题是,在包的后续更新中,我想插入默认值,前提是节点foo不存在。使用当前变换时,节点总是被替换回原来的位置 我在xdt:Locator中尝试了以下表达式,以尝试确定节点是否已经存在,但没有任何运气 xdt:Locator="Condition(boolean(//configuration/*[local-name()='foo']))" xdt:Loc

我在Web.config.install.xdt中有一个带有以下转换的Nuget包


初始安装后,使用者将
条的属性值更改为ie


我的问题是,在包的后续更新中,我想插入默认值,前提是节点
foo
不存在。使用当前变换时,节点总是被替换回原来的位置


我在
xdt:Locator
中尝试了以下表达式,以尝试确定节点是否已经存在,但没有任何运气

xdt:Locator="Condition(boolean(//configuration/*[local-name()='foo']))"
xdt:Locator="XPath(/configuration/foo[1])"
当我在VisualStudio中执行“预览转换”时,这些工作正常,但在更新Nuget包时失败。我想Nuget对这类表达式的支持有限,但我找不到任何关于这个主题的文档

我已经使用Nuget Package Manager 3.5.1996和3.4.4.1321以及VS 2017预览版(26020)在VS 2015.3中进行了测试


有人知道如何解决这个问题吗?

根据您的Web.config.install.xdt文件内容,我使用NuGet Package Manager 3.5.1996在Visual Studio 2015.3中进行了测试。如果consum项目中存在foo节点,则更新包时不会替换foo节点

以下步骤是我所做的,我已经用app.config.install.xdt和Web.config.install.xdt测试了这些步骤

  • 创建一个项目(项目a)包含一个Web.config.install.xdt,它的内容与您的相同
  • 将项目打包为NuGet软件包,并将Web.config.install.xdt文件添加到此软件包的内容文件夹中
  • 在另一个包含Web.config文件的项目(项目B)上安装此软件包。foo节点将被添加到Web中,并使用值“something”进行配置
  • 在Web.config中将“something”修改为“OtherValue”并保存
  • 修改项目A中的某些代码,并将其重新打包为版本2.0.0
  • 更新项目B中的包,foo节点值仍然显示为“OtherValue”

  • 请注意,更改foo值后,请保存项目并重新生成,以确保它能够成功生成。

    根据您的Web.config.install.xdt文件内容,我使用NuGet Package Manager 3.5.1996在Visual Studio 2015.3中进行了测试。如果consum项目中存在foo节点,则更新包时不会替换foo节点

    以下步骤是我所做的,我已经用app.config.install.xdt和Web.config.install.xdt测试了这些步骤

  • 创建一个项目(项目a)包含一个Web.config.install.xdt,它的内容与您的相同
  • 将项目打包为NuGet软件包,并将Web.config.install.xdt文件添加到此软件包的内容文件夹中
  • 在另一个包含Web.config文件的项目(项目B)上安装此软件包。foo节点将被添加到Web中,并使用值“something”进行配置
  • 在Web.config中将“something”修改为“OtherValue”并保存
  • 修改项目A中的某些代码,并将其重新打包为版本2.0.0
  • 更新项目B中的包,foo节点值仍然显示为“OtherValue”

  • 请注意,更改foo值后,请保存并重新生成项目,以确保它可以成功生成。

    请尝试检查
    .config.uninstall.xdt
    文件。升级时,Nuget会删除旧包,然后安装新包。所以,如果您在卸载文件中放入一个删除连接到包的所有节点的代码,您可能会遇到这个问题。

    尝试检查您的
    .config.uninstall.xdt
    文件。升级时,Nuget会删除旧包,然后安装新包。所以,如果您在卸载文件中放入一个删除所有连接到该包的节点的代码,您可能会遇到这个问题。

    是自定义包还是默认包?你能在这里分享吗?你是如何更新你的软件包的?与此文档类似:•如果当前Web.config中缺少元素,请插入一部分元素。可用的目标部分是否包含不同的元素?是自定义包还是默认包?你能在这里分享吗?你是如何更新你的软件包的?与此文档类似:•如果当前Web.config中缺少元素,请插入一部分元素。可用的目标部分是否包含不同的元素?@Espen Lønnkvist您是否检查了您的步骤以及是否有任何差异?如果可能,请在此处分享您的步骤,以帮助我们重现您的问题。@Espen Lønnkvist您是否检查了您的步骤以及是否有任何差异?如果可能,请在此处分享您的步骤,以帮助我们重现您的问题。