首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XmlMassUpdate更新所有appSettings

使用XmlMassUpdate更新所有appSettings
EN

Stack Overflow用户
提问于 2011-08-31 17:10:09
回答 1查看 1.4K关注 0票数 1

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

这是我到目前为止所得到的

代码语言:javascript
复制
<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>

在其中一个配置上失败,报告无法找到‘/ App.configs /appSettings’

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-31 19:59:34

您需要在两个步骤中完成此操作:

  • 查询app.config以检查标记/configuration/appSettings是否存在
  • Call XmlMassUpdate仅在具有标记

的文件上

代码语言:javascript
复制
<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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7254858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档