azukipochette's weblog

memory dump (mini)

効率的に NuGet スペック ファイル (.nuspec) を書く

Visual Studio Code 向けに Redhat 製の XML 拡張機能が提供されているので、これを使う。

marketplace.visualstudio.com

nuspec ファイルの XSD ファイルの最新は GitHub 上で管理されている。

github.com

XSD を使った自動補完 (Auto complete/IntelliSence) はいくつかあるが、nuspec ファイルに直接手を入れずに補完するには、XML 拡張機能を導入した後、"xml.fileAssociations" を設定するとよい。

    "xml.fileAssociations": [
    {
        "systemId": "https://raw.githubusercontent.com/NuGet/NuGet.Client/dev/src/NuGet.Core/NuGet.Packaging/compiler/resources/nuspec.xsd",
        "pattern": "**/*.nuspec"
    }

既知の問題と対策

上記のように記載すると、XSD による検証によって、package 要素の xmlns 属性に "{0}" を指定しなければならない。 これは、そのように XSD に明記されているためだが、このままではパッケージ化することはできない。

nuget pack コマンドでは、xmlns で指定可能な名前空間は 6 種類の URI のいずれかでなけらばならいようにコーディングされているので、いずれかの URI にするか xmlns 属性を消去する必要がある。*1

実際の判定コードは以下にある。

github.com

*1:指定しない場合、既定で "http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd" が使われるようだ