Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用XmlMassUpdate更新所有appSettings_.net_Msbuild_Msbuildcommunitytasks_Xmlmassupdate - Fatal编程技术网

.net 使用XmlMassUpdate更新所有appSettings

.net 使用XmlMassUpdate更新所有appSettings,.net,msbuild,msbuildcommunitytasks,xmlmassupdate,.net,Msbuild,Msbuildcommunitytasks,Xmlmassupdate,我想使用MSBuild中的XmlMassUpdate任务更新所有app.configs中的appSettings。我遇到的问题是,一些app.config没有appSettings元素,我无法让XmlMassUpdate跳过这些元素 这是我到目前为止得到的 <ProjectExtensions> <appSettings xmlns:xmu="urn:msbuildcommunitytasks-xmlmassupdate"> <add xmu:key="

我想使用MSBuild中的XmlMassUpdate任务更新所有app.configs中的appSettings。我遇到的问题是,一些app.config没有appSettings元素,我无法让XmlMassUpdate跳过这些元素

这是我到目前为止得到的

<ProjectExtensions>
  <appSettings xmlns:xmu="urn:msbuildcommunitytasks-xmlmassupdate">
    <add xmu:key="key" key="SettingName" value="newSetting" xmu:action="update" />
  </appSettings>
</ProjectExtensions>
<Target Name="Change">
   <ItemGroup>
     <AppConfigFiles Include="$(SourceRoot)\**\App.config" />
   </ItemGroup>
   <XmlMassUpdate 
      ContentFile="$(SourceRoot)\%(AppConfigFiles.RecursiveDir)App.config"
      ContentRoot="/configuration/appSettings"
      NamespaceDefinitions="msb=http://schemas.microsoft.com/developer/msbuild/2003"
      SubstitutionsFile="$(MSBuildProjectDirectory)\SetConfig.proj"
      SubstitutionsRoot="/msb:Project/msb:ProjectExtensions/msb:appSettings" />
</Target>


其中一个应用程序失败。配置表示无法定位“/configuration/appSettings”

您需要分两步执行此操作:

  • 查询app.config以检查标记
    /configuration/appSettings
    是否存在
  • 仅对带有标记的文件调用XmlMassUpdate


您需要通过两个步骤完成:

  • 查询app.config以检查标记
    /configuration/appSettings
    是否存在
  • 仅对带有标记的文件调用XmlMassUpdate



太棒了,成功了!有一件小事,我必须将XmlMassUpdate中的ContentFile更新为$(AppConfigFile)。太棒了,成功了!一件小事,我必须将XmlMassUpdate中的ContentFile更新为$(AppConfigFile)。
<ProjectExtensions>
  <appSettings xmlns:xmu="urn:msbuildcommunitytasks-xmlmassupdate">
    <add xmu:key="key" key="SettingName" value="newSetting" xmu:action="update" />
  </appSettings>
</ProjectExtensions>

<Target Name="UpdateIfNecessary">
  <!-- Check if appSettings exists-->
  <XmlQuery XmlFileName="$(AppConfigFile)"
           XPath = "/configuration/appSettings">
   <Output TaskParameter="Values" ItemName="appSettings" />
  </XmlQuery>

  <!-- Replace if appSettings exists -->
  <XmlMassUpdate Condition="%(appSettings._innerXml) != ''"
    ContentFile="$(AppConfigFile)"
    ContentRoot="/configuration/appSettings"
    NamespaceDefinitions="msb=http://schemas.microsoft.com/developer/msbuild/2003"
    SubstitutionsFile="$(MSBuildProjectDirectory)\SetConfig.proj"
    SubstitutionsRoot="/msb:Project/msb:ProjectExtensions/msb:appSettings" />
</Target>


<Target Name="MassUpdate">
  <ItemGroup>
    <AppConfigFiles Include="$(SourceRoot)\**\App.config" />
  </ItemGroup>

  <!-- Execute UpdateIfNecessary for each app.config file -->
  <MSBuild Projects="$(MSBuildProjectFile)" 
           Targets="UpdateIfNecessary"
           Properties="AppConfigFile=%(AppConfigFiles.Fullpath)"/> 
</Target>