Я хочу использовать MSBuild для вставки собственного XML-элемента в web.config. После поиска в Интернете, я нашел такое решение:Как правильно ссылаться на пространство имен для Microsoft.Sdc.Tasks.XmlFile.GetValue
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): error: Message = Префикс пространства имен 'msb' не равен .
Я пробовал несколько вариантов ссылки на него по-другому, но никто не работает, и не так уж много о том, чтобы правильно ссылаться на эти пространства имен в Интернете. Можете ли вы сказать мне, что я делаю неправильно и как это сделать?
Обнаружил ошибку - должен был использоваться @ при ссылке на элемент из Itemgroup, а не на $. Так что на самом деле это должно выглядеть Namespaces = "@ (XmlNamespace)" –