Я экспериментирую с xml-литералами в vb.net и кое-что не понимаю. Вот небольшой пример, иллюстрирующий проблему. Я добавляю два PropertyGroup
узла в пустой проект Visual Studio. Первый добавляется как xml-литерал, второй как new XElement
:
Imports <xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
Module MyModule
Sub Main()
Dim vbproj = <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>
vbproj.Root.Add(<PropertyGroup></PropertyGroup>)
Dim xNameSpace As XNamespace = "http://schemas.microsoft.com/developer/msbuild/2003"
vbproj.Root.Add(New XElement(xNameSpace + "PropertyGroup"))
Console.WriteLine(vbproj)
End Module
Этот код записывает следующий вывод:
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup xmlns="http://schemas.microsoft.com/developer/msbuild/2003"></PropertyGroup>
<PropertyGroup />
</Project>
Как видите, первый узел PropertyGroup
содержит избыточное объявление xmlns. Почему это так и можно ли этого избежать?