3

私はvb.netでxmlリテラルを試していますが、得られないものがあります。これが問題を説明する小さなサンプルです。PropertyGroup空のVisualStudioプロジェクトに2つのノードを追加しています。最初のものはxmlリテラルとして追加され、2番目は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 を使用できない場合は、次の 2 つのブログ投稿に示されているように、名前空間をクリーンアップすることを検討してください。

于 2011-04-28T18:59:22.067 に答える