「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>NuGet]]

* 目次 [#mdf74180]
#contents

*概要 [#i9733684]
NuGetパッケージを作成してみたくなったので調査。
-NuGetパッケージを作成してみたくなったので調査。

**Nugetでできること。 [#a040b4d4]
使っていれば、だいたい解っていると思うけど、

-[[.NET Framework アセンブリへの参照の追加>#ec2eb9f8]]
-[[他のNugetパッケージへの依存関係の追加>#kd3ca09a]]

-追加するファイル
--[[アセンブリの参照の追加(*.dll)>#h5442e78]]
--コンテンツファイルの追加(*.js, *.css, *.txtなど)
***追加できるファイル [#j7523ddd]
-[[アセンブリの参照の追加(*.dll)>#h5442e78]]
-コンテンツ・ファイルの追加(*.js, *.cssなどのライブラリ)
-[[テンプレートの拡張>ASP.NET Identity#gffbd798]](プロジェクトに追加の構成を加える)

-その他
--複数のTarget Frameworksのサポート
--appSettingsなど、*.configの編集
***パッケージの色々 [#gec7b7db]
-[[Localized Package(ローカライズ)>#m0794562]]
-Pre-release Package(β版)
-[[Symbol Package(デバッグ用)>#ie773165]]

--パッケージの色々
---[[Localized Packages(ローカライズ)>#m0794562]]
---Pre-release Packages(β版)
---Native Packages(C ++)
---[[Symbol Packages(デバッグ用)>#ie773165]]
***その他 [#veb6fd74]
-複数のTarget Frameworksのサポート
-appSettingsなど、*.configの編集

**.NET Frameworkプロジェクト以外 [#u426c81c]

***[[.NET Standard]]、[[.NET Core]] [#ue1467f7]
-[[.NET Standard]]、[[.NET Core]]も、.NET Frameworkと同じ。
-ただし、[[Dependencies>#s01937f7]]の記載方法に注意が必要。

***Native Package(C++) [#z93db893]
C++の、Native Packageも作成できる模様。

-Qiita

--Visual Studio 2015 CommunityでOpenCVを使う (C++)~
https://qiita.com/konta220/items/f23f50decbae1133d198

--C++プロジェクトでNuGetを使ってみようよ!
---Vol. 1:パッケージ導入編~
https://qiita.com/nia_tn1012/items/77c3c1b006f7c69d30ac
---Vol. 2:パッケージ作成編~
https://qiita.com/nia_tn1012/items/0815e1f493ac49d20d41

-microsoft.com

--NuGet for C++ | Visual C++ Team Blog~
https://blogs.msdn.microsoft.com/vcblog/2013/04/26/nuget-for-c/

--ネイティブ NuGet パッケージを作成する | Microsoft Docs~
https://docs.microsoft.com/ja-jp/nuget/create-packages/native-packages

*基本的な手順 [#e7f7484f]
-NuGet Gallery | Home~
https://www.nuget.org/

**Nugetのサイトにサインイン [#a55f9b01]
-NuGet Gallery | Home~
https://www.nuget.org/

-Microsoftアカウントでサインアップ可能。
--連携するのはメールアドレスで、同時にユーザ名の入力が必要。
--サインアップ後、サインインが可能になる。
--ローカル・ログオン用のパスワードはアカウント編集画面から設定可能。

-以下はサインアップ・サインイン後のアカウント編集画面~
--NuGet Gallery | Edit Profile~
https://www.nuget.org/account

**NugetのサイトからNuget.exeを取得 [#l2fefcbe]
-NuGet Gallery | Home~
https://www.nuget.org/
-NuGet Gallery | Downloads~
https://www.nuget.org/downloads

>[Install NuGet]~
latest nuget.exe - all downloads - documentation
>に遷移。

--latest nuget.exeをクリックして、nuget.exeのDownloadを行う。
-Windows x86 Commandline~
nuget.exe - recommended latest vn.n.n

>をクリックして、nuget.exeをDownload。

**nuspecファイルの生成 [#jb00308a]
***nuspecファイルとは? [#v00b525f]
-パッケージのメタデータを含むXML形式のマニフェスト(公約文書)。 
-マニフェスト(公約文書)は常にパッケージに含まれる。
-パッケージを構築し、消費者に情報を提供するために使用される。

***nuspecファイルの出力準備 [#b8676227]
-nuget.exeへのパスを通しておくか、~
プロジェクトファイル(*.csproj)のあるフォルダにnuget.exeを配置する。
-AssemblyInfoの属性値を使用するので、これに属性を記入しておく。
--規定値
 [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.exeからnuspecファイルを出力 [#x6cccfb1]
-プロジェクトファイル(*.csproj)から生成する。
--プロジェクトファイル(*.csproj)のあるフォルダで[nuget spec]コマンドを実行する。
 nuget spec
--*.nuspecファイルが生成される(何故か、AssemblyInfoの属性値が反映されなかった)。
 <?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>

-DLLファイル(*.dll)から生成する。
--DLLファイル(*.dll)を指定して[nuget spec]コマンドを実行する。
 nuget spec [*.dllファイルパス]
--*.nuspecファイルが生成される(こちらも、AssemblyInfoの属性値が反映されていない)。
 <?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>

**nuspecファイルの編集 [#ee2e5317]
-生成されたnuspecファイルを修正する。
-それぞれの項目については[[下記>#n3a85383]]を参照。

以下、ザックリとした説明。

***id [#j434d1ce]
例 : Oracle.DataAccess(.dll)とか、Microsoft.AspNet.Identity(.dll)とか。

-一意
-名前空間っぽくする。
-社名などを使うと良い。
-サンプルのパッケージは、*.Sampleを足す。

***title [#xc6afe09]
-[[id>#j434d1ce]]とは別の名称、呼称など。
-例えば、Newtonsoft.Jsonに対するJson.NETなど。~
https://www.nuget.org/packages/Newtonsoft.Json/

***description [#rbe8e1a7]
パッケージのザックリとした説明。

***authors、owners [#g9c24808]
-owners~
開発した個人。

-authors~
著作権を持つ個人・団体。

-参考
--Owner or Author ? What’s the Difference?~
http://kelleykeller.com/owner-vs-author-whats-the-difference/

***projectUrl、licenseUrl、iconUrl [#qe2df163]
各種URLを設定する。
-projectUrl
-licenseUrl
-iconUrl

***version [#r8c14f07]
-依存関係を解決する際に使用されるパッケージバージョン。
-パッケージを単一のアセンブリに限定するためのもの。

-基本的には、以下の3つを使用して~
「n.n.n」(Major.Minor.Patch)と構成する。
--メジャーバージョン
--マイナーバージョン
--下位互換性のあるバグ修正

-注 :
--アセンブリバージョンではなく、パッケージバージョン
--故に、アセンブリバージョンと一致させる必要はない。

-基本的には、以下の3つを使用して「n.n.n」(Major.Minor.Patch)と構成する。
--メジャーバージョン
--マイナーバージョン
--下位互換性のあるバグ修正
-参考

-α、β版のバージョンは以下が参考になる。
--NuGet Gallery | LambdicSql_β~
https://www.nuget.org/packages/LambdicSql/0.0.3~
https://www.nuget.org/packages/LambdicSql/0.1.0
---[[id>#j434d1ce]]はRelease版と共通にして、
---[[title>#xc6afe09]]にα、βの版文字を含める
--Pre-release versions in NuGet packages | Microsoft Docs~
https://docs.microsoft.com/ja-jp/nuget/create-packages/prerelease-packages#semantic-versioning
--- -alpha: Alpha release, typically used for work-in-progress and experimentation
--- -beta: Beta release, typically one that is feature complete for the next planned release, but may contain known bugs.
--- -rc: Release candidate, typically a release that's potentially final (stable) unless significant bugs emerge.
--- -xxx: NuGet version does not support string such as "1.0.1-build.23".~
And, like this is always considered a pre-release version.
--[[プレリリース版のNuGetパッケージ>#o3f3febe]]

-参考
--安藤幸央のランダウン(51):意外と知らないバージョン表記・数字の豆知識 - @IT~
http://www.atmarkit.co.jp/ait/articles/1003/26/news106.html

***.NET Framework アセンブリへの参照の追加 [#ec2eb9f8]
 <frameworkAssemblies> 
   <frameworkAssembly assemblyName="System.Web" /> 
 </frameworkAssemblies>

***他のNugetパッケージへの依存関係の追加 [#kd3ca09a]
 <dependencies> 
   <dependency id="jQuery" /> 
 </dependencies>

バージョンを指定可能。範囲指定も可能。

-Dependency Versions in NuGet | Microsoft Docs~
https://docs.microsoft.com/ja-jp/nuget/create-packages/dependency-versions

***アセンブリの参照の追加(*.dll) [#h5442e78]
***アセンブリの追加(*.dll) [#h5442e78]
[[target>https://docs.microsoft.com/ja-jp/dotnet/standard/frameworks]]を設定して、アセンブリ(*.dll)を同梱する。

 <files> 
   <file src="bin\Release\*.*" target="lib\net45" /> 
 </files>

***参考 [#ufd9e6b0]
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で使用されます -->
     <!-- このアイコンは、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は、パッケージ・マネージャの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>

**パッケージの作成 [#i825791f]
**パッケージ(nupkgファイル)の作成 [#i825791f]
***プロジェクト・ファイルを使用 [#e712e2b9]
-以下のコマンドでパッケージを作成する。
 nuget pack [*.csprojファイルパス]

-カレントでやれば、*.csprojファイルのパス指定は不要。
 nuget pack

-リリースビルを選択する場合、
 nuget pack -Prop Configuration=Release

***nuspecファイルを使用 [#g07875e2]
-手動で「[[パッケージにファイルを含める>#h7f974d4]]」場合はnuspecファイルを指定して実行する。
-「[[高度な設定>#v9ecded0]]」を行う場合はnuspecファイルを作成・指定して実行する。
 nuget pack [*.nuspecファイルパス]

***nupkgファイルの内容確認方法 [#p66307ac]
-「*.nupkg、*.symbols.nupkg」は ZIP ファイルなので、~
拡張子を「*.zip」にすれば、解凍して実際に含まれる ファイルを確認可能。

-同梱されているアセンブリの詳細については、~
「[[.NETアセンブリのtargetFrameworkを確認する方法]]」~
に記述されている方法で確認できる。

**NuGet への登録 [#q8d1dbf1]

***コマンドラインから [#a892ebc9]
-Access Keyを取得する。
Accountページに遷移してAPI Keysを取得する。
--NuGet Gallery | Edit Profile~
https://www.nuget.org/account
--E-Mail Confirmationが必要。

-以下のコマンドでNuGet へ登録する。
--方法1(urlのv1は、バージョン指定?)
 nuget push -source http://packages.nuget.org/v1/ [*.nupkgファイルパス] [access key]

--方法2(URLは不要?)
 nuget setapikey [access key] 
 nuget push [*.nupkgファイルパス] 

***Webサイトから [#oafcb7ca]
NuGet Gallery でアップロードする場合、API Keysは不要。

-NuGet Gallery | Upload Package~
https://www.nuget.org/packages/manage/upload

***公開前にテスト実行する。 [#f976e345]
***公開前に(ローカルで)テスト実行する。 [#f976e345]
-以下が参考になる。
--.NET開発の新標準「NuGet」入門(後編) - @IT~
http://www.atmarkit.co.jp/fdotnet/chushin/nuget_02/nuget_02_02.html
--[[NuGetプライベート・リポジトリ]]

-ざっくり、
--Nugetパッケージ マネージャーの設定で、~
--Nugetパッケージ・マネージャーの設定で、~
パッケージ ソース(ローカルPCのフォルダ)を追加する。
--ソリューションのNugetパッケージの管理を開き、~
追加したパッケージ ソースを選択して「参照」の検索窓から検索する。
#ref(Nuget.png,left,nowrap,50%,ソリューションのNugetパッケージの管理)

--検索されたNugetパッケージを選択してインストールする。
--packagesフォルダには以下のようにインストールされる。
 Touryo.Public.2.0.0
  ├ lib
  |  └ net46
  |      ├ Public.dll
  |      └ Public.XML
  └ Touryo.Public.2.0.0.nupkg
--なお、依存関係も自動的に反映されるようで、~
このプロジェクトのpackages.configで使用しているパッケージも同時にインストールされた。

**バージョンアップする。 [#m026269b]
nuspec ファイルの version を書き換えて同じように nupkg をアップロード。

*高度な設定 [#v9ecded0]

**パッケージにファイルを含める [#h7f974d4]

***パッケージに含めるファイル [#z01ea2e5]
-ターゲットプロジェクトに挿入するコンテンツとソースコード
-PowerShellスクリプト(インストールスクリプト、NuGet 2.xでのみサポート)
-プロジェクト内の既存の構成ファイルおよびソースコードファイルへの変換

***作業ディレクトリのフォルダ構造レイアウトの規則 [#ee27a351]
|#|フォルダ|説明|パッケージのインストール時の動作|h
|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)に自動的に挿入されます。|
|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)に自動的に挿入される。|

***パッケージへのインクルード [#ufc7e259]
nuspecファイルの<metadata>要素と同じ階層に、~
&lt;files>か<contentFiles>要素を追加することで、ファイルをインクルード出来る。

-[[アセンブリ・ファイル>https://docs.microsoft.com/ja-jp/nuget/schema/nuspec#including-assembly-files]]
--ファイルは*.nupkgファイルを作成するときに自動的にインクルードされる。
--<files>要素を使用し、自動動作を回避、インクルード・ファイルを明示的に制御できる。

-[[コンテンツ・ファイル>https://docs.microsoft.com/ja-jp/nuget/schema/nuspec#including-content-files]]
--contentFiles要素を使用する。

**複数のTarget Frameworksのサポート [#b3135d75]
https://docs.microsoft.com/ja-jp/nuget/create-packages/supporting-multiple-target-frameworks

「[[パッケージにファイルを含める>#h7f974d4]]」の方法で、複数バージョンを同梱するだけでいい。

***設定 [#vc3794df]
以下は、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>

***結果 [#c7bee26c]
パッケージのインストール後のpackagesフォルダのlibフォルダは以下のようになる。

-lib\{framework name}[{version}]
-例:
 \lib
     \net46
         \MyAssembly.dll
     \net461
         \MyAssembly.dll
     \uap
         \MyAssembly.dll
     \netcore
         \MyAssembly.dll

***参考 [#d5d16531]
Dapperのnuspecファイルが参考になる。

-dapper-dot-net/dapper.nuspec at master · perliedman/dapper-dot-net~
https://github.com/perliedman/dapper-dot-net/blob/master/dapper.nuspec#L67
  <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>

**パッケージ [#mcfbe29c]
***[[.NET Standard]]、[[.NET Core]]のDependencies [#s01937f7]
dependencies > group > targetFramework="netstandard2.0" 等とする。

***Localized Packages(ローカライズ) [#m0794562]
    <dependencies>
      <group>
        <dependency id="DotNetZip" version="1.12.0" />
        <dependency id="log4net" version="2.0.8" />
        <dependency id="Newtonsoft.Json" version="11.0.2" />
      </group>
      <group targetFramework="netstandard2.0">
        <dependency id="log4net" version="2.0.8" />
        <dependency id="Microsoft.Extensions.Configuration" version="2.2.0" />
        <dependency id="Microsoft.Extensions.Configuration.Binder" version="2.2.0" />
        <dependency id="Microsoft.Extensions.Configuration.FileExtensions" version="2.2.0" />
        <dependency id="Microsoft.Extensions.Configuration.Json" version="2.2.0" />
        <dependency id="Newtonsoft.Json" version="11.0.2" />
        <dependency id="System.Data.Odbc" version="4.5.0" />
        <dependency id="System.Data.SqlClient" version="4.5.1" />
      </group>
    </dependencies>

**様々なパッケージ [#mcfbe29c]

***Localized Package(ローカライズ) [#m0794562]
https://docs.microsoft.com/ja-jp/nuget/create-packages/creating-localized-packages

以下の2つの方法がある。

-Localized resource assembly(Localized satellite assembly)を同梱する。
--ワイルドカードを使用する方法。
--xxxx.resources.dllを個別に同梱することもできる。

-個別にLocalized satellite packagesを作成する。~
(Microsoft.Owin.ja や Microsoft.AspNet.Mvc.ja 的な)

***[[Symbol Packages(デバッグ用)>NuGetパッケージのデバッグ#e3f16568]] [#ie773165]
***[[Symbol Package(デバッグ用)>NuGetパッケージのデバッグ#e3f16568]] [#ie773165]

***[[NuGetパッケージのプレリリース版]] [#o3f3febe]

***package type [#g888561e]
NuGet 3.5以降で設定可能。

-Dependency(既定値)~
上記の説明はコレ。

-DotnetCliTool~
.NET Coreプロジェクトにのみインストールできる.NET Core CLI ツール

-カスタムタイプパッケージ~
DependencyとDotnetCliTool以外のタイプは、~
Visual StudioのNuGet Package Managerによって認識されない。

*注意 [#x579d11b]
**一度登録すると通常消せない。 [#g6945e13]
-バージョン番号を上げてアップロードすることでアップデートする。
-必要に応じて、別途、運営に連絡して削除することはできる。
-必要に応じて、
--旧バージョンを非表示にすることはできる。
--別途、運営に連絡して削除することもできる。

**ビルド [#x1b78e6d]
'*.pdbを同梱する場合は、ビルド時のフォルダ構成に注意すること。

**[[デバッグ>NuGetパッケージのデバッグ]] [#l1981569]


**依存関係 [#u9a8011d]
***Dependenciesタグ [#sf97bdb3]
NuGetサイトに表示されるのは、*.nspecファイルのDependenciesタグ明記したもの。

***自動的に追加されるNuGetパッケージ [#x04c4821]
しかし、NuGetから追加された時には、
-package.configによるのか、
-バイナリ解析によるのか、

不明だが自動的に依存関係にあるNuGetパッケージが追加される。

**[[Symbolの作成・登録と公開方法の変更>NuGetパッケージのデバッグ#h8a8f180]] [#v314a3f7]

*参考 [#y156cbe0]
**NuGetパッケージの開発と公開 [#sb50efa4]
-プロジェクトをNugetパッケージにして公開する - Qiita~
http://qiita.com/icoxfog417/items/71718196cc4f335892d4

-NuGet パッケージを作成して公開する | Do Design Space~
https://sakapon.wordpress.com/2013/07/16/nugetpackage/

-NuGet パッケージを作って公開する - しばやん雑記~
http://blog.shibayan.jp/entry/20110306/1299422776

-Nugetギャラリーにライブラリを登録するまでの手順 - SourceChord~
http://sourcechord.hatenablog.com/entry/2016/02/19/201502

-NuGet - パッケージを作成して NuGet で公開する~
https://msdn.microsoft.com/ja-jp/magazine/hh708753.aspx

-Create ​Packages > Overview and workflow of creating NuGet packages | Microsoft Docs~
**Microsoft Docs [#r90c5f27]
-Create ​Packages > Overview and workflow of creating NuGet packages~
https://docs.microsoft.com/ja-jp/nuget/create-packages/overview-and-workflow
--How to create a NuGet package~
https://docs.microsoft.com/ja-jp/nuget/create-packages/creating-a-package
--Dependency Versions in NuGet~
https://docs.microsoft.com/ja-jp/nuget/create-packages/dependency-versions
--Supporting ​Multiple ​Target ​Frameworks~
https://docs.microsoft.com/ja-jp/nuget/create-packages/supporting-multiple-target-frameworks
--Creating ​Localized ​Packages~
https://docs.microsoft.com/ja-jp/nuget/create-packages/creating-localized-packages
--Symbol ​Packages~
https://docs.microsoft.com/ja-jp/nuget/create-packages/symbol-packages
--Publish a ​Package~
https://docs.microsoft.com/ja-jp/nuget/create-packages/publish-a-package

-NuGet.org 上の組織~
https://docs.microsoft.com/ja-jp/nuget/nuget-org/organizations-on-nuget-org

>※ Organizations on NuGet.org | The NuGet Blog~
  https://devblogs.microsoft.com/nuget/organizations-on-nuget-org/

**nuspecファイルの定義例 [#h83986d2]
***著名なパッケージを参考にする。 [#i7310626]

-Newtonsoft.Json(Json.NET)~
https://github.com/JamesNK/Newtonsoft.Json/blob/master/Build/Newtonsoft.Json.nuspec
-Dapper~
https://github.com/perliedman/dapper-dot-net/blob/master/dapper.nuspec

***Open棟梁のパッケージを参考にする。 [#ad8e8930]
-/OpenTouryoProject/OpenTouryo/~
https://github.com/OpenTouryoProject/OpenTouryo/tree/develop/root/programs/C%23/NuGet
https://github.com/OpenTouryoProject/OpenTouryo/tree/develop/root/programs/CS/NuGet

-NuGet導入、NuGet登録 - Open 棟梁 Wiki~
https://opentouryo.osscons.jp/index.php?NuGet%E5%B0%8E%E5%85%A5%E3%80%81NuGet%E7%99%BB%E9%8C%B2

**nuspecファイルのメタデータ要素 [#n3a85383]
-.nuspec File Reference for NuGet | Microsoft Docs~
https://docs.microsoft.com/ja-jp/nuget/schema/nuspec
--NuGet.Client/nuspec.xsd at dev · NuGet/NuGet.Client~
https://github.com/NuGet/NuGet.Client/blob/dev/src/NuGet.Core/NuGet.Packaging/compiler/resources/nuspec.xsd
>このnuspec.xsdをVisual Studioで確認するとSchemeの詳細が解るらしい。

***必要なメタデータ要素(最小要件) [#t3a22c04]
|#|要素|説明|h
|1|id|大文字と小文字を区別しない、nuget.orgなどのパッケージ・ギャラリー内で一意なパッケージ識別子。&br;IDにはURLに有効でないスペースや文字含めない。|
|2|version|major.minor.patchパターンのパッケージのバージョン。&br;バージョン番号には、[[プレリリースパッケージ>https://docs.microsoft.com/ja-jp/nuget/create-packages/prerelease-packages#semantic-versioning]]に記載されているリリース前のサフィックスが含まれている場合があります。|
|2|version|major.minor.patchパターンのパッケージのバージョン。&br;バージョン番号には、[[プレリリースパッケージ>https://docs.microsoft.com/ja-jp/nuget/create-packages/prerelease-packages#semantic-versioning]]に記載されているリリース前のサフィックスが含まれている場合がある。|
|3|description|nuget.orgでパッケージのページを表示したときに表示される概要説明文|
|4|authors|パッケージ著者のカンマ区切りのリスト。|

***オプションのメタデータ要素(必要に応じて追加) [#y3cb29dd]
-単項目
|#|要素名|説明|h
|1|title|パッケージには、一般的にはUIで使用される、パッケージの人間にとって使いやすいタイトルがnuget.orgやVisual Studioのパッケージマネージャで表示されます。&br;指定しない場合、パッケージIDが代わりに使用されます。|
|2|owners|nuget.orgでプロファイル名を使用しているパッケージ作成者のカンマ区切りのリスト。&br;これらはnuget.orgのNuGet Galleryに表示され、同じ著者によるパッケージの相互参照に使用されています。|
|3|projectUrl|パッケージのホームページのURL。&br;多くの場合、UI表示とnuget.orgに表示されます。|
|4|licenseUrl|パッケージのライセンスのURL。&br;nuget.orgと同様にUI表示にも表示されることがよくあります。|
|1|title|パッケージには、一般的にはUIで使用される、パッケージの人間にとって使いやすいタイトルがnuget.orgやVisual Studioのパッケージ・マネージャで表示される。&br;指定しない場合、パッケージIDが代わりに使用される。|
|2|owners|nuget.orgでプロファイル名を使用しているパッケージ作成者のカンマ区切りのリスト。&br;これらはnuget.orgのNuGet Galleryに表示され、同じ著者によるパッケージの相互参照に使用されている。|
|3|projectUrl|パッケージのホームページのURL。&br;多くの場合、UI表示とnuget.orgに表示される。|
|4|licenseUrl|パッケージのライセンスのURL。&br;nuget.orgと同様にUI表示にも表示されることがよくある。|
|5|iconUrl|UI表示でパッケージのアイコンとして使用する透過背景を持つ64x64画像のURL。|
|6|requireLicenseAcceptance|パッケージをインストールする前に、パッケージライセンスを受け入れるようにクライアントに指示する必要があるかどうかを指定するブール値。|
|7|developmentDependency|(2.8+)パッケージが開発専用依存としてマークされるかどうかを指定するブール値。&br;パッケージが他のパッケージへの依存として含まれないようにします。|
|8|summary|Visual Studioから検索して表示される一覧表示用のパッケージの短い説明。&br;省略された場合、記述の切り詰められたバージョンが使用されます。|
|9|releaseNotes|(1.5+)このパッケージのリリースで行われた変更の説明。&br;パッケージ説明の代わりにVisual Studioパッケージマネージャの[更新]タブなどのUIでよく使用されます。|
|7|developmentDependency|(2.8+)パッケージが開発専用依存としてマークされるかどうかを指定するブール値。&br;パッケージが他のパッケージへの依存として含まれないようにする。|
|8|summary|Visual Studioから検索して表示される一覧表示用のパッケージの短い説明。&br;省略された場合、記述の切り詰められたバージョンが使用される。|
|9|releaseNotes|(1.5+)このパッケージのリリースで行われた変更の説明。&br;パッケージ説明の代わりにVisual Studioパッケージ・マネージャの[更新]タブなどのUIでよく使用される。|
|10|copyright|(1.5+)パッケージの著作権詳細。|
|11|language|パッケージのロケールID。&br;ローカライズされたパッケージの作成を参照してください。|
|12|tags|パッケージを記述するタグとキーワードのスペース区切りリストで、&br;検索とフィルタリングのメカニズムを通じたパッケージの発見可能性を支援します。|
|11|language|パッケージのロケールID。&br;ローカライズされたパッケージの作成を参照。|
|12|tags|パッケージを記述するタグとキーワードのスペース区切りリストで、&br;検索とフィルタリングのメカニズムを通じたパッケージの発見可能性を支援する。|
|13|serviceable|(3.3+)内部NuGet専用|
|14|minClientVersion|(2.5+)このパッケージをインストールできるNuGetクライアントの最小バージョンを指定します。&br;このバージョンは、nuget.exeとVisual Studio Package Managerによって適用されます。&br;これは、パッケージがNuGetクライアントの特定のバージョンで追加された.nuspecファイルの特定の機能に依存する場合に使用されます。&br;例えば、developmentDependency属性を使用するパッケージは、minClientVersionに「2.8」を指定します。&br;同様に、contentFiles要素を使用するパッケージ(次のセクションを参照)は、minClientVersionを "3.3"に設定します。&br;また、2.5より前のNuGetクライアントはこのフラグを認識しないため、minClientVersionで使用する値に関係なく、常にパッケージのインストールを拒否します。|
|14|minClientVersion|(2.5+)このパッケージをインストールできるNuGetクライアントの最小バージョンを指定する。&br;このバージョンは、nuget.exeとVisual Studio Package Managerによって適用される。&br;これは、パッケージがNuGetクライアントの特定のバージョンで追加された.nuspecファイルの特定の機能に依存する場合に使用される。&br;例えば、developmentDependency属性を使用するパッケージは、minClientVersionに「2.8」を指定する。&br;同様に、contentFiles要素を使用するパッケージ(次のセクションを参照)は、minClientVersionを "3.3"に設定する。&br;また、2.5より前のNuGetクライアントはこのフラグを認識しないため、minClientVersionで使用する値に関係なく、常にパッケージのインストールを拒否する。|

-複数項目
|#|要素名|説明|h
|1|packageTypes|(3.3+)伝統的な依存パッケージ以外のパッケージのタイプを指定する0個以上の<packageType>要素の集合。&br;各packageTypeにはnameとversionの属性があります。パッケージタイプの設定を参照してください。|
|2|dependencies|パッケージの依存関係を指定する0個以上の<dependency>要素の集合。&br;各依存関係には、id、version、include(3.x +)、およびexclude(3.x +)の属性があります。&br;下記の依存関係を参照してください。|
|3|frameworkAssemblies|(1.2+)このパッケージに必要な.NET Frameworkアセンブリ参照を識別する0個以上の<frameworkAssembly>要素のコレクション。&br;パッケージを使用するプロジェクトに参照が確実に追加されます。&br;各frameworkAssemblyにはassemblyName属性とtargetFramework属性があります。&br;下記のフレームワークアセンブリ参照GACの指定を参照してください。|
|4|references|(1.5+)プロジェクトの参照として追加される、パッケージのlibフォルダ内のアセンブリを命名する0個以上の<reference>要素のコレクション。&br;各参照にはファイル属性があります。&br;<references>は、<reference>要素を含むtargetFramework属性を持つ<group>要素も含むことができます。&br;省略すると、libのすべての参照が含まれます。&br;下記の明示的アセンブリ参照の指定を参照してください。|
|5|contentFiles|(3.3+)コンシューマプロジェクトに含めるコンテンツファイルを識別する<files>要素のコレクション。&br;これらのファイルは、プロジェクトシステム内でどのように使用されるべきかを記述する一連の属性で指定されます。&br;下記のパッケージに含めるファイルの指定を参照してください。|
|1|packageTypes|(3.3+)伝統的な依存パッケージ以外のパッケージのタイプを指定する0個以上の<packageType>要素の集合。&br;各packageTypeにはnameとversionの属性がある。パッケージタイプの設定を参照。|
|2|dependencies|パッケージの依存関係を指定する0個以上の<dependency>要素の集合。&br;各依存関係には、id、version、include(3.x +)、およびexclude(3.x +)の属性がある。&br;下記の依存関係を参照。|
|3|frameworkAssemblies|(1.2+)このパッケージに必要な.NET Frameworkアセンブリ参照を識別する0個以上の<frameworkAssembly>要素のコレクション。&br;パッケージを使用するプロジェクトに参照が確実に追加される。&br;各frameworkAssemblyにはassemblyName属性とtargetFramework属性がある。&br;下記のフレームワークアセンブリ参照GACの指定を参照。|
|4|references|(1.5+)プロジェクトの参照として追加される、パッケージのlibフォルダ内のアセンブリを命名する0個以上の<reference>要素のコレクション。&br;各参照にはファイル属性がある。&br;<references>は、<reference>要素を含むtargetFramework属性を持つ<group>要素も含むことができる。&br;省略すると、libのすべての参照が含まれる。&br;下記の明示的アセンブリ参照の指定を参照。|
|5|contentFiles|(3.3+)コンシューマプロジェクトに含めるコンテンツファイルを識別する<files>要素のコレクション。&br;これらのファイルは、プロジェクトシステム内でどのように使用されるべきかを記述する一連の属性で指定される。&br;下記のパッケージに含めるファイルの指定を参照。|

**NuGetパッケージ関連 [#ge82720f]
***[[NuGetプライベート・リポジトリ]] [#t6e5d70f]
***[[NuGetパッケージのデバッグ]] [#w62300b5]
***[[NuGetパッケージのプレリリース版]] [#u646f6d5]

**Open 棟梁 Wiki [#x2bb67ef]

***[[NuGet導入、NuGet登録>https://opentouryo.osscons.jp/index.php?NuGet%E5%B0%8E%E5%85%A5%E3%80%81NuGet%E7%99%BB%E9%8C%B2]] [#n6ff5a15]

***[[Open棟梁のバージョン番号付与ポリシー>https://opentouryo.osscons.jp/index.php?Open%E6%A3%9F%E6%A2%81%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%95%AA%E5%8F%B7%E4%BB%98%E4%B8%8E%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC]] [#ha7d94e6]

**OssCons...TestClassLibrary1 [#h99e4e03]
OSSコンソーシアム 開発基盤部で登録したテスト用ライブラリ

-SampleProgram/NuGet at master · OpenTouryoProject/SampleProgram~
https://github.com/OpenTouryoProject/SampleProgram/tree/master/NuGet

-NuGet Gallery | OssCons.DotNetSubcommittee.TestClassLibrary1~
https://www.nuget.org/packages/OssCons.DotNetSubcommittee.TestClassLibrary1/

----
Tags: [[:デプロイ]], [[:NuGet]], [[:.NET開発]]
Tags: [[:.NET開発]], [[:デプロイ]], [[:NuGet]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS