Я хочу использовать MSBuild для вставки пользовательского элемента XML в web.config. Посмотрев онлайн, я нашел такое решение:
1) Сохранение элемента в файле .build в projectextensions
<ProjectExtensions>
<CustomElement name="CustomElementName">
...
</CustomElement>
</ProjectExtensions>
2) Получить элемент с помощью GetValue
<Target name="ModifyConfig">
<XmlFile.GetValue Path="$(MSBuildProjectFullPath)"
XPath="Project/ProjectExtensions/CustomElement[@name='CustomElementName']">
<Output TaskParameter="Value" PropertyName="CustomElementProperty"/>
</XmlFile.GetValue>
</Target>
Это не будет работать , так как мне нужно сослаться на пространство имен, которое использует проект .build, чтобы найти нужный элемент (проверил файл .build с XPath Visualizer). Итак, я ищу дальнейшее решение и прихожу к этому:
<ItemGroup>
<XmlNamespace Include="MSBuild">
<Prefix>msb</Prefix>
<Uri>http://schemas.microsoft.com/developer/msbuild/2003</Uri>
</XmlNamespace>
</ItemGroup>
<Target name="ModifyConfig">
<XmlFile.GetValue Path="$(MSBuildProjectFullPath)" Namespaces="$(XmlNamespace)"
XPath="/msb:Project/msb:ProjectExtensions/msb:CustomElement[@name='CustomElementName']"
>
<Output TaskParameter="Value" PropertyName="CustomElementProperty"/>
</XmlFile.GetValue>
</Target>
Но по какой-то причине пространство имен не распознается - MSBuild сообщает о следующей ошибке:
C: ... \ mybuild.build (53,9): ошибка: произошла ошибка задачи.
C: ... \ mybuild.build (53,9): ошибка: сообщение = префикс пространства имен 'msb' не является
определены.
Я попробовал несколько вариантов ссылки на него по-другому, но ни одна из них не работает, и не так уж много о правильной ссылке на эти пространства имен в Интернете. Можете ли вы сказать мне, что я делаю неправильно и как это сделать правильно?