【问题标题】:xml namespace and xml literalsxml 命名空间和 xml 文字
【发布时间】:2011-04-28 13:47:53
【问题描述】:

我正在 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 声明。为什么会这样,可以避免吗?

【问题讨论】:

    标签: vb.net xml-literals


    【解决方案1】:

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

    避免这种情况的最简单方法是使用 SaveOptions.OmitDuplicateNamespaces enumeration,它在 .NET 4.0 中可用:

    vbproj.AddAnnotation(SaveOptions.OmitDuplicateNamespaces)
    

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

    【讨论】:

    • 太棒了!我正在使用.Net 4,所以这对我来说非常有用!谢谢你。我不知道这些 SaveOptions.. 不是很容易发现 :-(
    猜你喜欢
    • 2012-03-23
    • 1970-01-01
    • 2011-12-26
    • 2020-04-27
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    相关资源
    最近更新 更多