次の方法で共有


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 属性を packages.config に追加し、それを pack コマンドで使用してランタイム パッケージのみを含める
  3. [Rafael Nicoletti](http://www.codeplex.com/site/users/view/tkrafael) (@tkrafael)
    • nuget.exe の pack コマンドでプロパティキーが重複しないようにします。
  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) - 'exclude' 属性のワイルドカードを誤って解析する nuget.pack のバグを修正しました。
  10. [Justin Dearing](http://www.codeplex.com/site/users/view/zippy1981) (@zippy1981)
    • [#3307](http://nuget.codeplex.com/workitem/3307) - パッケージの復元時に $(Platform) が nuget.exe に渡されないバグ NuGet.targets を修正しました。
  11. [Brian Federici](http://www.codeplex.com/site/users/view/benerdin)
    • [#3294](http://nuget.codeplex.com/workitem/3294) - nuget.exe パッケージ コマンドのバグを修正しました。これにより、同じ名前で大文字と小文字が異なるファイルを追加でき、最終的に "Item already exists" 例外が発生します。
  12. [Daniel Cazzulino](http://www.codeplex.com/site/users/view/dcazzulino) (@kzu)
    • [#2990](http://nuget.codeplex.com/workitem/2990) - NetPortableProfile クラスに Version プロパティを追加します。
  13. [David Simner](https://www.codeplex.com/site/users/view/DavidSimner)
    • [#3460](https://nuget.codeplex.com/workitem/3460) - requireApiKey = true の場合、バグ NullReferenceException が修正されましたが、ヘッダー X-NUGET-APIKEY が存在しません
  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 2.7 以降では、パッケージ復元の同意は既定でオンになっていますが、ユーザーは Visual Studio の NuGet の設定のチェック ボックスを使用して、必要に応じてパッケージの復元を明示的に オプトアウト できます。 暗黙的な同意に対するこの変更は、次の環境の NuGet に影響します。

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

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

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

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

Visual Studio でパッケージの自動復元を使用するには、次の操作を 1 つだけ実行する必要があります。

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

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

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

パッケージ マネージャーの設定

Command-Line からの簡略化されたパッケージの復元

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

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

  1. nuget.exe restore MySolution.sln
  2. nuget.exe を復元します
  3. nuget.exe 復元

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

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

新しいワークフローが導入されているため、パッケージの復元に対するこれらの変更に興奮しています。 ソース管理からパッケージを省略する場合は、 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 つありましたが、 NuGet.CommandLine パッケージの更新により 2013 年 9 月 6 日に修正されました。 この更新プログラムは、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 構成の既定値 」を参照してください。

既定のパッケージ ソースの名前変更

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 SKU と同じコード ベースを共有するため、 Visual Studio 2010 Express for Windows Phone 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 パッケージ マネージャー (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)を参照してください。