効率的に NuGet スペック ファイル (.nuspec) を書く
Visual Studio Code 向けに Redhat 製の XML 拡張機能が提供されているので、これを使う。
nuspec ファイルの XSD ファイルの最新は GitHub 上で管理されている。
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
- http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd
- http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd
- http://schemas.microsoft.com/packaging/2011/10/nuspec.xsd
- http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd
- http://schemas.microsoft.com/packaging/2013/01/nuspec.xsd
- http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd
実際の判定コードは以下にある。
*1:指定しない場合、既定で "http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd" が使われるようだ