「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
NuGetパッケージを作成してみたくなったので調査。
使っていれば、だいたい解っていると思うけど、
に遷移。
をクリックして、nuget.exeをDownload。
[assembly: AssemblyTitle("Public")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("xxxxxxxxxx")]
[assembly: AssemblyProduct("Public")]
[assembly: AssemblyCopyright("Copyright (C) 2007,2016 xxxxxxxxxx")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")][assembly : AssemblyMetadata("ProjectUrl", "http・・・")]
[assembly : AssemblyMetadata("LicenseUrl", "http・・・")]nuget spec
<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>
    <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
    <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>$description$</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2017</copyright>
    <tags>Tag1 Tag2</tags>
  </metadata>
</package>nuget spec [*.dllファイルパス]
<?xml version="1.0"?>
<package >
  <metadata>
    <id>Public.dll</id>
    <version>1.0.0</version>
    <authors>(Windowsにログインしたユーザ名)</authors>
    <owners>(Windowsにログインしたユーザ名)</owners>
    <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>
    <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
    <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package description</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2017</copyright>
    <tags>Tag1 Tag2</tags>
    <dependencies>
      <dependency id="SampleDependency" version="1.0" />
    </dependencies>
  </metadata>
</package>以下、ザックリとした説明。
例 : Oracle.DataAccess?(.dll)とか、Microsoft.AspNet?.Identity(.dll)とか。
パッケージのザックリとした説明。
各種URLを設定する。
<frameworkAssemblies> <frameworkAssembly assemblyName="System.Web" /> </frameworkAssemblies>
<dependencies> <dependency id="jQuery" /> </dependencies>
バージョンを指定可能。範囲指定も可能。
<files> <file src="bin\Release\*.*" target="lib\net45" /> </files>
https://docs.microsoft.com/ja-jp/nuget/create-packages/creating-a-package
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata>
    <!-- The identifier that must be unique within the hosting gallery -->
    <!-- ホスティングギャラリー内で一意でなければならないID -->
    <id>Contoso.Utility.UsefulStuff</id>
    <!-- The package version number that is used when resolving dependencies -->
    <!-- 依存関係を解決するときに使用されるパッケージのバージョン番号 -->
    <version>1.8.3.331</version>
    <!-- Authors contain text that appears directly on the gallery -->
    <!-- Authorsには、ギャラリーに直接表示されるテキストが含まれています -->
    <authors>Dejana Tesic, Rajeev Dey</authors>
    <!-- Owners are typically nuget.org identities that allow gallery users to easily find other packages by the same owners.  -->
    <!-- ownersは通常、ギャラリーのユーザーが同じownerによる他のパッケージを簡単に見つけることを可能にするnuget.org IDです。 -->
    <owners>dejanatc, rjdey</owners>
    <!-- License and project URLs provide links for the gallery -->
    <!-- licenseUrlとprojectUrlはギャラリーにリンクを提供します -->
    <licenseUrl>http://opensource.org/licenses/MS-PL</licenseUrl>
    <projectUrl>http://github.com/contoso/UsefulStuff</projectUrl>
    <!-- The icon is used in Visual Studio's package manager UI -->
    <!-- このアイコンは、Visual StudioのパッケージマネージャUIで使用されます -->
    <iconUrl>http://github.com/contoso/UsefulStuff/nuget_icon.png</iconUrl>
    <!-- If true, this value prompts the user to accept the license when installing the package. -->
    <!-- trueの場合、この値は、パッケージのインストール時にライセンスを受け入れるようにユーザーに指示します。 -->
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <!-- Any details about this particular release -->
    <!-- このリリースに関する詳細 -->
    <releaseNotes>Bug fixes and performance improvements</releaseNotes>
    <!-- The description can be used in package manager UI. Note that the nuget.org gallery uses information you add in the portal. -->
    <!-- descriptionは、パッケージマネージャのUIで使用できます。 nuget.orgギャラリーでは、ポータルに追加した情報が使用されます。 -->
    <description>Core utility functions for web applications</description>
    <!-- Copyright information -->
    <!-- 著作権情報 -->
    <copyright>Copyright ©2016 Contoso Corporation</copyright>
    <!-- Tags appear in the gallery and can be used for tag searches -->
    <!-- tagsはギャラリーに表示され、tag検索に使用できます -->
    <tags>web utility http json url parsing</tags>
    <!-- Dependencies are automatically installed when the package is installed -->
    <!-- dependencyは、パッケージのインストール時に自動的に(他のパッケージが)インストールされます。 -->
    <dependencies>
      <dependency id="Newtonsoft.Json" version="9.0" />
    </dependencies>
  </metadata>
  <!-- A readme.txt will be displayed when the package is installed -->
  <!-- パッケージのインストール時に readme.txt が表示されます -->
  <files>
    <file src="readme.txt" target="" />
  </files>
</package>
nuget pack [*.csprojファイルパス]
nuget pack
nuget pack -Prop Configuration=Release
nuget pack [*.nuspecファイルパス]
nuget push -source http://packages.nuget.org/v1/ [*.nupkgファイルパス] [access key]
nuget setapikey [access key] nuget push [*.nupkgファイルパス]
NuGet Gallery でアップロードする場合、API Keysは不要。
Touryo.Public.2.0.0 ├ lib | └ net46 | ├ Public.dll | └ Public.XML └ Touryo.Public.2.0.0.nupkg
nuspec ファイルの version を書き換えて同じように nupkg をアップロード。
| # | フォルダ | 説明 | パッケージのインストール時の動作 | 
| 1 | tools | Package Manager ConsoleパッケージマネージャコンソールからアクセスできるPowershellスクリプトとプログラム | 内容はプロジェクトフォルダにコピーされ、ツールフォルダはPATH環境変数に追加される。 | 
| 2 | lib | アセンブリファイル(.dll)、ドキュメント(.xml)ファイル、およびシンボル(.pdb)ファイル | アセンブリは参照として追加される。 .xmlと.pdbはプロジェクトフォルダにコピーされる。 | 
| 3 | content | 任意のファイル | コンテンツはプロジェクトルートにコピーされる。 | 
| 4 | build | MSBuild .targetsと.propsファイル | プロジェクトファイル(NuGet 2.x)またはproject.lock.json(NuGet 3.x)に自動的に挿入される。 | 
nuspecファイルの<metadata>要素と同じ階層に、
<files>か<contentFiles>要素を追加することで、ファイルをインクルード出来る。
https://docs.microsoft.com/ja-jp/nuget/create-packages/supporting-multiple-target-frameworks
「パッケージにファイルを含める」の方法で、複数バージョンを同梱するだけでいい。
以下は、nuspecファイルの設定例
<files> <file src="bin\Release\net46\MyAssembly.dll" target="lib\net46" /> <file src="bin\Release\net461\MyAssembly.dll" target="lib\net461" /> <file src="bin\Release\uap\MyAssembly.dll" target="lib\uap" /> <file src="bin\Release\netcore\MyAssembly.dll" target="lib\netcore" /> </files>
パッケージのインストール後のpackagesフォルダのlibフォルダは以下のようになる。
\lib
    \net46
        \MyAssembly.dll
    \net461
        \MyAssembly.dll
    \uap
        \MyAssembly.dll
    \netcore
        \MyAssembly.dllDapperのnuspecファイルが参考になる。
<files> <file src="Dapper NET45\bin\Release\Dapper.dll" target="lib\net45" /> <file src="Dapper NET45\bin\Release\Dapper.pdb" target="lib\net45" /> <file src="Dapper NET45\bin\Release\Dapper.xml" target="lib\net45" /> <file src="Dapper NET40\bin\Release\Dapper.dll" target="lib\net40" /> <file src="Dapper NET40\bin\Release\Dapper.pdb" target="lib\net40" /> <file src="Dapper NET40\bin\Release\Dapper.xml" target="lib\net40" /> <file src="Dapper NET35\bin\Release\Dapper.dll" target="lib\net35" /> <file src="Dapper NET35\bin\Release\Dapper.pdb" target="lib\net35" /> <file src="Dapper NET35\bin\Release\Dapper.xml" target="lib\net35" /> </files>
https://docs.microsoft.com/ja-jp/nuget/create-packages/creating-localized-packages
以下の2つの方法がある。
NuGet 3.5以降で設定可能。
NuGetサイトに表示されるのは、*.nspecファイルのDependenciesタグ明記したもの。
しかし、NuGetから追加された時には、
不明だが自動的に依存関係にあるNuGetパッケージが追加される。
このnuspec.xsdをVisual Studioで確認するとSchemeの詳細が解るらしい。
| # | 要素 | 説明 | 
| 1 | id | 大文字と小文字を区別しない、nuget.orgなどのパッケージ・ギャラリー内で一意なパッケージ識別子。 IDにはURLに有効でないスペースや文字含めない。  | 
| 2 | version | major.minor.patchパターンのパッケージのバージョン。 バージョン番号には、プレリリースパッケージに記載されているリリース前のサフィックスが含まれている場合がある。  | 
| 3 | description | nuget.orgでパッケージのページを表示したときに表示される概要説明文 | 
| 4 | authors | パッケージ著者のカンマ区切りのリスト。 | 
| # | 要素名 | 説明 | 
| 1 | title | パッケージには、一般的にはUIで使用される、パッケージの人間にとって使いやすいタイトルがnuget.orgやVisual Studioのパッケージマネージャで表示される。 指定しない場合、パッケージIDが代わりに使用される。  | 
| 2 | owners | nuget.orgでプロファイル名を使用しているパッケージ作成者のカンマ区切りのリスト。 これらはnuget.orgのNuGet Galleryに表示され、同じ著者によるパッケージの相互参照に使用されている。  | 
| 3 | projectUrl | パッケージのホームページのURL。 多くの場合、UI表示とnuget.orgに表示される。  | 
| 4 | licenseUrl | パッケージのライセンスのURL。 nuget.orgと同様にUI表示にも表示されることがよくある。  | 
| 5 | iconUrl | UI表示でパッケージのアイコンとして使用する透過背景を持つ64x64画像のURL。 | 
| 6 | requireLicenseAcceptance? | パッケージをインストールする前に、パッケージライセンスを受け入れるようにクライアントに指示する必要があるかどうかを指定するブール値。 | 
| 7 | developmentDependency | (2.8+)パッケージが開発専用依存としてマークされるかどうかを指定するブール値。 パッケージが他のパッケージへの依存として含まれないようにする。  | 
| 8 | summary | Visual Studioから検索して表示される一覧表示用のパッケージの短い説明。 省略された場合、記述の切り詰められたバージョンが使用される。  | 
| 9 | releaseNotes | (1.5+)このパッケージのリリースで行われた変更の説明。 パッケージ説明の代わりにVisual Studioパッケージマネージャの[更新]タブなどのUIでよく使用される。  | 
| 10 | copyright | (1.5+)パッケージの著作権詳細。 | 
| 11 | language | パッケージのロケールID。 ローカライズされたパッケージの作成を参照。  | 
| 12 | tags | パッケージを記述するタグとキーワードのスペース区切りリストで、 検索とフィルタリングのメカニズムを通じたパッケージの発見可能性を支援する。  | 
| 13 | serviceable | (3.3+)内部NuGet専用 | 
| 14 | minClientVersion? | (2.5+)このパッケージをインストールできるNuGetクライアントの最小バージョンを指定する。 このバージョンは、nuget.exeとVisual Studio Package Managerによって適用される。 これは、パッケージがNuGetクライアントの特定のバージョンで追加された.nuspecファイルの特定の機能に依存する場合に使用される。 例えば、developmentDependency属性を使用するパッケージは、minClientVersion?に「2.8」を指定する。 同様に、contentFiles要素を使用するパッケージ(次のセクションを参照)は、minClientVersion?を "3.3"に設定する。 また、2.5より前のNuGetクライアントはこのフラグを認識しないため、minClientVersion?で使用する値に関係なく、常にパッケージのインストールを拒否する。  | 
| # | 要素名 | 説明 | 
| 1 | packageTypes | (3.3+)伝統的な依存パッケージ以外のパッケージのタイプを指定する0個以上の<packageType>要素の集合。 各packageTypeにはnameとversionの属性がある。パッケージタイプの設定を参照。  | 
| 2 | dependencies | パッケージの依存関係を指定する0個以上の<dependency>要素の集合。 各依存関係には、id、version、include(3.x +)、およびexclude(3.x +)の属性がある。 下記の依存関係を参照。  | 
| 3 | frameworkAssemblies | (1.2+)このパッケージに必要な.NET Frameworkアセンブリ参照を識別する0個以上の<frameworkAssembly>要素のコレクション。 パッケージを使用するプロジェクトに参照が確実に追加される。 各frameworkAssemblyにはassemblyName属性とtargetFramework属性がある。 下記のフレームワークアセンブリ参照GACの指定を参照。  | 
| 4 | references | (1.5+)プロジェクトの参照として追加される、パッケージのlibフォルダ内のアセンブリを命名する0個以上の<reference>要素のコレクション。 各参照にはファイル属性がある。 <references>は、<reference>要素を含むtargetFramework属性を持つ<group>要素も含むことができる。 省略すると、libのすべての参照が含まれる。 下記の明示的アセンブリ参照の指定を参照。  | 
| 5 | contentFiles | (3.3+)コンシューマプロジェクトに含めるコンテンツファイルを識別する<files>要素のコレクション。 これらのファイルは、プロジェクトシステム内でどのように使用されるべきかを記述する一連の属性で指定される。 下記のパッケージに含めるファイルの指定を参照。  |