.net 使用XmlMassUpdate更新所有appSettings
我想使用MSBuild中的XmlMassUpdate任务更新所有app.configs中的appSettings。我遇到的问题是,一些app.config没有appSettings元素,我无法让XmlMassUpdate跳过这些元素 这是我到目前为止得到的.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="
<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>