Справка Обновление XML-файла с использованием MSBuild Extensions 4 с пространствами имен
У меня возникли некоторые проблемы с получением расширений MSBuild 4.0 для обновления XML-файла после включения пространства имен.
Когда у меня есть простой XML-файл без пространства имен, тогда нормально, но как только я пытаюсь обновить XML-файл, у которого установлено пространство имен, тогда ничего не происходит.. обратите внимание, что ошибки нет.
Вот простые, которые отлично работают
<Project>
<PropertyGroup>
<ApplicationVersion>5.1.500.16</ApplicationVersion>
</PropertyGroup>
<PropertyGroup>
<ApplicationVersion>old</ApplicationVersion>
</PropertyGroup>
</Project>
и файл проекта
<Project ToolsVersion="4.0" DefaultTargets="Default" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<TPath>C:\Program Files\MSBuild\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks</TPath>
<AssemblyVersion>5.1.500.18</AssemblyVersion>
</PropertyGroup>
<Import Project="$(TPath)"/>
<Target Name="Default">
<MSBuild.ExtensionPack.Xml.XmlFile TaskAction="RemoveElement" " File="c:\build\test.csproj" XPath="/Project/PropertyGroup[1]/ApplicationVersion" />
</Target>
</Project>
Когда они ничего не делают!
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://mynamespace">
<PropertyGroup>
<ApplicationVersion>5.1.500.16</ApplicationVersion>
</PropertyGroup>
<PropertyGroup>
<ApplicationVersion>old</ApplicationVersion>
</PropertyGroup>
</Project>
а также
<Project ToolsVersion="4.0" DefaultTargets="Default" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<TPath>C:\Program Files\MSBuild\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks</TPath>
<AssemblyVersion>5.1.500.18</AssemblyVersion>
</PropertyGroup>
<Import Project="$(TPath)"/>
<ItemGroup>
<Namespaces Include="Mynamespace">
<Prefix>me</Prefix>
<Uri>"http://mynamespace"</Uri>
</Namespaces>
</ItemGroup>
<Target Name="Default">
<MSBuild.ExtensionPack.Xml.XmlFile TaskAction="RemoveElement" Namespaces="@(Namespaces)" File="c:\build\test.csproj" XPath="//me:Project/PropertyGroup[1]/ApplicationVersion" />
</Target>
</Project>
Так в чем же дело? что мне не хватает? Это форматирование XPath во втором экземпляре? Я пробовал все виды вариаций.
2 ответа
Попробуй это:
<Target Name="Default">
<MSBuild.ExtensionPack.Xml.XmlFile TaskAction="RemoveElement" Namespaces="@(Namespaces)" File="c:\build\test.csproj" XPath="//me:Project/me:PropertyGroup[1]/me:ApplicationVersion" />
</Target>
(префикс пространства имен перед каждым элементом xpath)
В дополнение к совету, приведенному в другом ответе, удалите цитаты из Uri
метаданные в Namespace
вещь.
Обратите внимание, что согласно примечанию для параметра префикса в документации MSDN, указание пустой строки для Prefix
метаданные никогда не будут работать.