3

我正在 vb.net 中尝试使用 xml 文字,但有些东西我没有得到。这是一个说明问题的小样本。我将两个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 声明。为什么会这样,可以避免吗?

4

1 回答 1

4

这似乎是设计使然,基于阅读Imports Statement (XML Namespace)的 MSDN 页面。

避免它的最简单方法是使用 .NET 4.0 中提供的SaveOptions.OmitDuplicateNamespaces枚举

vbproj.AddAnnotation(SaveOptions.OmitDuplicateNamespaces)

如果 .NET 4.0 不是一个选项,那么您可以考虑清理命名空间,如以下两篇博文所示:

于 2011-04-28T18:59:22.067 回答