次の方法で共有


NuGet 2.7 リリース ノート

NuGet 2.6.1 for WebMatrix リリース ノート | NuGet 2.7.1 リリース ノート

NuGet 2.7 は、2013 年 8 月 22 日にリリースされました。

確認

NuGet 2.7 に多大な貢献をしていただいた次の外部共同作成者に深く感謝をいたします。

  1. [Mike Roth](http://www.codeplex.com/site/users/view/mxrss) (@mxrss)
    • パッケージのリストを表示する時にライセンスの URL を表示すると、詳細が明確になります。
  2. [Adam Ralph](http://www.codeplex.com/site/users/view/adamralph) (@adamralph)
    • [#1956](http://nuget.codeplex.com/workitem/1956) - developmentDependency 属性を pack コマンドに追加packages.configして使用し、ランタイム パッケージのみを含めます
  3. [Rafael Nicoletti](http://www.codeplex.com/site/users/view/tkrafael) (@tkrafael)
    • nuget.exe パック コマンドでプロパティ キーが重複しないようにします。
  4. [Ben Phegan](http://www.codeplex.com/site/users/view/benphegan) (@BenPhegan)
    • [#2610](http://nuget.codeplex.com/workitem/2610) - マシンのキャッシュ サイズを 200 に増やします。
  5. [Slava Trenogin](http://www.codeplex.com/site/users/view/derigel) (@derigel)
    • [#3217](http://nuget.codeplex.com/workitem/3217) - NuGet ダイアログで間違ったタブに更新が表示される問題を修正する
    • ProjectManager 内で Project.TargetFramework を null 値になることがある問題の修正
    • [#3248](http://nuget.codeplex.com/workitem/3248) - 存在しない packageId で SharedPackageRepository FindPackage/FindPackagesById が失敗する問題の修正
  6. [Kevin Boyle](http://www.codeplex.com/site/users/view/KevinBoyleRG) (@kevfromireland)
    • [#3234](http://nuget.codeplex.com/workitem/3234) - Nomad プロジェクトのサポートを有効にします
  7. [Corin Blaikie](http://www.codeplex.com/site/users/view/corinblaikie) (@corinblaikie)
    • [#3252](http://nuget.codeplex.com/workitem/3252) - ファイルが存在しない場合に終了コード 0 でのプッシュ コマンドが失敗する問題の修正
  8. [Martin Veselý](http://www.codeplex.com/site/users/view/veselkamartin)
    • [#3226](http://nuget.codeplex.com/workitem/3226) - プロジェクトがデータベース プロジェクトを参照するときの Add-BindingRedirect コマンドのバグの修正
  9. [Miroslav Bajtos](http://www.codeplex.com/site/users/view/miroslavbajtos) (@bajtos)
    • [#2891](http://nuget.codeplex.com/workitem/2891) - nuget.pack が 'exclude' 属性のワイルドカードを誤って解析するバグの修正
  10. [Justin Dearing](http://www.codeplex.com/site/users/view/zippy1981) (@zippy1981)
    • - パッケージの復元時、$(Platform) が nuget.exe にに渡されない[#3307](http://nuget.codeplex.com/workitem/3307)バグの修正NuGet.targets
  11. [Brian Federici](http://www.codeplex.com/site/users/view/benerdin)
    • [#3294](http://nuget.codeplex.com/workitem/3294) - nuget.exe パッケージ コマンドで同じ名前で大文字と小文字が異なるファイルを追加できて、最終的に "品目はすでに存在しています" という例外を引き起こすバグの修正
  12. [Daniel Cazzulino](http://www.codeplex.com/site/users/view/dcazzulino) (@kzu)
    • [#2990](http://nuget.codeplex.com/workitem/2990) - Version プロパティを NetPortableProfile クラスに追加します。
  13. [David Simner](https://www.codeplex.com/site/users/view/DavidSimner)
    • [#3460](https://nuget.codeplex.com/workitem/3460) - requireApiKey = true であるが、ヘッダー X-NUGET-APIKEY が存在しない場合のバグ NullReferenceException の修正
  14. [Michael Friis](https://www.codeplex.com/site/users/view/friism) (@friism)
    • [#3278](https://nuget.codeplex.com/workitem/3278) - MonoDevelop 内で正しく動作するように、NuGet.Build ターゲット ファイルを修正する
  15. [Pranav Krishnamoorthy](https://www.codeplex.com/site/users/view/pranavkm) (@pranav_km)
    • 並列化の増加による復元コマンドのパフォーマンスの向上

本リリースの注目すべき事項

NuGet 2.7 では、パッケージの復元に新しいアプローチが導入され、パッケージ復元の同意が既定で有効になるという、大きなハードルの克服もありました。 新しいアプローチと暗黙の同意の組み合わせにより、パッケージの復元シナリオが大幅に簡略化されます。

NuGet バージョン 2.0、2.1、2.2、2.5、2.6 では、ユーザーはビルド中に NuGet に不足しているパッケージのダウンロードを NuGet に明示的に許可する必要がありました。 この同意が明示的に与えられていない場合は、パッケージの復元を有効にしたソリューションは、ユーザーが許可を与えるまで、ビルドに失敗します。

NuGet 2.7 以降では、パッケージの復元の同意は既定でオンになっていますが、ユーザーは、必要に応じて、Visual Studio の NuGet の設定のチェックボックスを使用して、パッケージの復元を明示的にオプトアウトできます。 暗黙の同意に対するこの変更は次の環境の NuGet に影響を与えます。

  • Visual Studio 2013 Preview
  • Visual Studio 2012
  • Visual Studio 2010
  • nuget.exe コマンド ラインのユーティリティ

Visual Studio 内でのパッケージの自動復元

NuGet 2.7 以降では、パッケージの復元がソリューションに対して明示的に有効になっていない場合でも、NuGet は Visual Studio でのビルド中に不足しているパッケージを自動的にダウンロードします。 このパッケージの自動復元は、プロジェクトまたはソリューションをビルドするとき、MSBuild が呼び出される前に、Visual Studio 内で実行されます。 これには、複数の大きなメリットがあります。

  1. ソリューションで「NuGet パッケージの復元を有効にする」ジェスチャを使用する必要がありません
  2. プロジェクトを変更する必要はなく、NuGet が、パッケージの復元を有効にするためにプロジェクトに変更を加えることはありません
  3. props/targets ファイルの MSBuild インポートを含むすべての NuGet パッケージは、MSBuild が呼び出される前に復元され、ビルド中にそれらのプロパティ/ターゲットが適切に認識されるようにします

Visual Studio でパッケージの自動復元を使用するには、次の 1 つのアクションを実行するだけで済みます。

  1. packagesフォルダーをチェックインしない

ソース管理からpackagesフォルダーを省略するための方法が複数あります。 詳細については、「パッケージとソース管理」というトピックを参照してください。

すべてのユーザーはパッケージの自動復元の同意を暗黙的にオプトインして、Visual Studio のパッケージ マネージャーの設定から簡単にオプトアウトできます。

Package Manager Settings

コマンド ラインからのパッケージ復元の簡素化

NuGet 2.7 では、nuget.exe の新機能が導入されました。nuget.exe restore

この新しい [復元] コマンドを使用すると、ソリューション ファイルまたはフォルダーを引数として受け入れることで、ソリューションのすべてのパッケージを 1 つのコマンドで簡単に復元できます。 さらに、この引数は、現在のフォルダーにソリューションが 1 つしかない場合に暗黙的に示されます。 つまり、次のすべての作業は、1 つのソリューション ファイル (MySolution.sln) を含むフォルダーから行われます。

  1. nuget.exe restore MySolution.sln
  2. nuget.exe restore .
  3. nuget.exe restore

[復元] コマンドを実行すると、ソリューション ファイルが開いて、ソリューション内のすべてのプロジェクトが検索されます。 そこから、各プロジェクトのpackages.configファイルが検索され、見つかったすべてのパッケージが復元されます。 また、.nuget\packages.configファイル内にあるソリューション レベルのパッケージも復元されます。 新しい [復元] コマンドの詳細については、「コマンド ライン リファレンス」を参照してください。

新しいパッケージの復元ワークフロー

パッケージの復元には、新しいワークフローが導入されており、当社として、これらの変更を嬉しく思います。 ソース管理からパッケージを省略する場合は、packagesフォルダーをコミットしないでください。 Visual Studio ユーザーがソリューションを開いてビルドすると、パッケージは自動的に復元されます。 コマンド ライン ビルドの場合は、nuget.exe restoreを呼び出す前にmsbuildを呼び出すだけです。 ソリューションで "NuGet パッケージの復元を有効にする" ジェスチャを使用することを覚えておく必要はなくなり、ビルドを変更するためにプロジェクトを変更する必要もなくなりました。 また、これにより、MSBuild インポートを含むパッケージ、特に \build フォルダーから props/targets ファイルを自動的にインポートするための NuGet の最近の機能によって追加されたインポートのエクスペリエンスが大幅に向上します。

当社で行ってきた作業に加えて、この新しいアプローチを完成させるために、複数の重要なパートナーとも連携しています。具体的なスケジュールについてはまだ未定ですが、パートナー各社も、当社と同じように、この新しい手法に興奮しています。

  • Team Foundation Service - nuget.exe restore呼び出しを既定のビルド シナリオに統合する作業を行っています。
  • Windows Azure Web サイト - お客様の Web サイトを構築する前に、お客様がプロジェクトを Azure にプッシュしてnuget.exe restoreを呼び出せるようにすることに取り組んでいます。
  • TeamCity - TeamCity 8.x 向け NuGet インストーラー プラグインを更新しています
  • AppHarbor - ソリューションをビルドする前に、リポジトリを AppHarbor にプッシュしてnuget.exe restoreを呼び出せるようにすることに取り組んでいます。

上記の各パートナーでは、nuget.exe の各コピーを使用しており、お客様はソリューションに nuget.exe を含める必要はありません。

既知の問題

最初の 2.7 リリースでは、nuget.exe の復元に関して 2 つの既知の問題がありましたが、これらは、2013 年 9 月 6 日に、NuGet.CommandLine パッケージの更新で修正されました。 この更新プログラムは CodePlex の [NuGet 2.7 download page](https://nuget.codeplex.com/releases/view/107605) でも提供しています。 nuget.exe update -self を実行すると、最新リリースに更新されます。

以下の修正が行われました。

  1. [New package restore doesn't work on Mono when using SLN file](https://nuget.codeplex.com/workitem/3596)
  2. [New package restore doesn't work with Wix projects](https://nuget.codeplex.com/workitem/3598)

また、新しいパッケージ復元ワークフローにも[Automatic Package Restore does not work for projects under a solution folder](https://nuget.codeplex.com/workitem/3625)という既知の問題があります。 この問題は NuGet 2.7.1 において修正されました。

プロジェクトの再ターゲティングとアップグレード ビルド エラー/警告

プロジェクトの再ターゲティングまたはアップグレード後に、複数の NuGet パッケージが正常に機能していないことが多数確認されています。 残念ながら、これに関して兆候はないため、対処する方法に関するガイダンスはありません。 NuGet 2.7 に関して、当社ではいくつかの Visual Studio イベントを使用して、プロジェクトを再ターゲティングまたはアップグレードしたタイミングを認識するようになりました。その際、インストールされている NuGet パッケージに影響を与える方法でこれを行います。

いずれかのパッケージが再ターゲティングまたはアップグレードの影響を受けていることが検出された場合は、当社にて、直ちにビルド エラーを生成して、お客様にお知らせいたします。 即時のビルド エラーに加えて、当社が再ターゲティングの影響を受けたすべてのパッケージのrequireReinstallation="true"フラグもお客様のpackages.configファイルに保持します。さらに、Visual Studio の後続のビルドごとに、これらのパッケージのビルド警告が発生します。

影響を受けるパッケージを再インストールするための自動アクションをNuGet が実行することはできませんが、この表示と警告が、パッケージを再インストールする必要がある場合の検出に役立つことを願っています。 また、当社は、これらのエラー メッセージから直接お客様に送信されるパッケージの再インストール ガイダンス ドキュメント についても取り組んでいます。

NuGet 構成のデフォルト

多くの企業内部で NuGet が使用されていますが、nuget.org の代わりに内部パッケージ ソースを開発者に使用するようガイドすることが難しかったため、NuGet 2.7 ではマシン全体の既定値を指定できる「構成の既定値」機能が導入されました。

  1. 有効なパッケージ ソース
  2. 登録されているが無効になっているパッケージ ソース
  3. デフォルトの nuget.exe プッシュ ソース

これらの各ファイルは、%ProgramData%\NuGet\NuGetDefaults.Configにあるファイル内で構成できるようになりました。 この構成ファイルがパッケージ ソースを指定している場合、既定の nuget.org パッケージ ソースは自動的に登録されず、NuGetDefaults.Configのものが代わりに登録されます。

この機能を使用する必要はありませんが、各企業でグループ ポリシーを使用して、NuGetDefaults.Configファイルを展開することをおすすめします。

この機能ではパッケージ ソースが開発者の NuGet 設定から削除されることはないことに注意してください。 つまり、開発者が既に NuGet を使っていて、したがって nuget.org パッケージ ソースが登録されている場合、NuGetDefaults.Config ファイルの作成後に nuget.org は削除されません。

この機能の詳細については、「NuGet フィード構成のデフォルト」を参照してください。

デフォルトのパッケージ ソース名の変更

NuGet は常に、nuget.org を指す "NuGet 公式パッケージ ソース" という既定のパッケージ ソースを登録します。その名前が詳細であったため、実際に指している場所も指定していませんでした。 これら 2 つの問題に対処するために、このパッケージ ソース名を UI 内で簡単に "nuget.org" に変更しました。 パッケージ ソースの URL も、"www." プレフィックスを含むように変更されました。 NuGet 2.7 を使用すると、お客様の既存の「NuGet 公式パッケージ ソース」の、その名前が "nuget.org" に、URL は「https://www.nuget.org/api/v2/」に自動的に更新されます。

パフォーマンスの向上

2.7 内でパフォーマンスが向上し、メモリ占有領域が小さくなり、ディスク使用量が縮小し、パッケージのインストールが高速化されました。 また、OData ベースのフィードのクエリを、よりスマートなものにして、全体的なペイロードを削減しました。

新しい拡張 API

以前のリリースでの機能不足のギャップを埋めるために、機能拡張サービスでは、いくつかの新しい API を追加しました。

IVsPackageInstallerServices

// Checks if a NuGet package with the specified Id and version is installed in the specified project.
bool IsPackageInstalledEx(Project project, string id, string versionString);

// Get the list of NuGet packages installed in the specified project.
IEnumerable<IVsPackageMetadata> GetInstalledPackages(Project project);

IVsPackageInstaller

// Installs one or more packages that exist on disk in a folder defined in the registry.
void InstallPackagesFromRegistryRepository(string keyName, bool isPreUnzipped, bool skipAssemblyReferences, Project project, IDictionary<string, string> packageVersions);

// Installs one or more packages that are embedded in a Visual Studio Extension Package.
void InstallPackagesFromVSExtensionRepository(string extensionId, bool isPreUnzipped, bool skipAssemblyReferences, Project project, IDictionary<string, string> packageVersions);

開発のみの依存関係

この機能は Adam Ralph によって提供されており、パッケージ作成者が開発時にのみ使用されるようにしてパッケージの依存関係を必要としない依存関係を宣言できます。 developmentDependency="true"のパッケージにpackages.config属性を追加すると、nuget.exe packはそのパッケージを依存関係として含めなくなります。

Visual Studio 2010 Express for Windows Phone のサポートの削除

2.7 内のこの新しいパッケージ復元モデルは、メイン NuGet VSPackage とは異なる、新しい VSPackage によって実装されています。 技術的な問題により、この新しい VSPackage は Visual Studio 2010 Express for Windows Phone SKU では正しく機能しません。これは、サポートされている他の Visual Studio SKU と同じコード ベースを共有するためです。 したがって、NuGet 2.7 以降では、発行済みの拡張情報から、Visual Studio 2010 Express for Windows Phoneのサポートを削除する予定です。 しかしながら、Visual Studio 2010 Express for Web のサポートは、引き続き Visual Studio 拡張情報ギャラリーの発行済みプライマリの拡張情報にあります。

Visual Studio のバージョン/エディションで NuGet を使用している開発者の数が当社がまだわからないため、これらのユーザー専用の別の Visual Studio 拡張情報を発行し、(Visual Studio 拡張情報ギャラリーではなく) CodePlex に発行します。 当社がその拡張情報を維持し続ける予定はありませんが、これにより影響がある場合は、CodePlex に問題を提出して当社にお知らせください。

NuGet Package Manager (Visual Studio 2010 Express for Windows Phone 用) をダウンロードするには、[NuGet 2.7 Downloads](https://nuget.codeplex.com/releases/view/107605)ページにアクセスしてください。

バグの修正

これらの機能に加えて、この NuGet のリリースには、他の多くのバグ修正も含まれています。 このリリースでは、合計 97 件の問題が解決されました。 NuGet 2.7 で修正された作業項目の全リストについては、[NuGet Issue Tracker for this release](https://nuget.codeplex.com/workitem/list/advanced?release=NuGet%202.7&status=all)を参照してください。