「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
NuGetパッケージを作成してみたくなったので調査。
使っていれば、だいたい解っていると思うけど、
[Install NuGet]
latest nuget.exe - all downloads - documentation
[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つの方法がある。
https://docs.microsoft.com/ja-jp/nuget/create-packages/symbol-packages
<files>
<file src="Full\bin\Debug\*.dll" target="lib\net40" />
<file src="Full\bin\Debug\*.pdb" target="lib\net40" />
<file src="Silverlight\bin\Debug\*.dll" target="lib\sl40" />
<file src="Silverlight\bin\Debug\*.pdb" target="lib\sl40" />
<file src="**\*.cs" target="src" />
</files>nuget pack [*.nuspecファイルパス] -Symbols nuget pack [*.csprojファイルパス] -Symbols
上記がガイドラインだが、個人的には、
のがイイと考えている。
NuGet 3.5以降で設定可能。
'*.pdbを同梱する場合は、ビルド時のフォルダ構成に注意すること。
なお、NuGetパッケージで展開されているモジュール内の
デバッグ実行が必要になった時の手順も確立しておく必要がある。
NuGetパッケージのモジュールを指定のフォルダに配置する。
上記の準備が整えば、デバッグ実行で、これらのファイルに
して、デバック実行を、することができる。
しかし、
「ソースファイルがモジュールがビルドされたときのものと異なります。デバッガでこのファイルを使用しますか?」
「ブレークポイントは、現在の設定ではヒットしません。ソースコードが元のバージョンと異なります。」
というメッセージが表示されデバッグできない場合がある。
この場合は、
[ツール] ---> [オプション] ---> [デバッグ] ---> [全般] の順にクリックし、
[元のバージョンと完全に一致するソース ファイルを必要とする] チェック ボックスをオフにする。
の手順に従って、
デバッグ実行が可能な設定に変更することができる。
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>要素のコレクション。 これらのファイルは、プロジェクトシステム内でどのように使用されるべきかを記述する一連の属性で指定されます。 下記のパッケージに含めるファイルの指定を参照してください。 |