13

今日、パッケージをインストールするときにNuGetの奇妙な動作に直面しました。

簡単な説明:ビルドスクリプトの結果として、NuGetパッケージがあります。毎回バージョンを変更するわけではないので、ビルドごとにが生成されMyPackage.1.0.0.nupkgます。ビルドの最後のステップとして、ローカルネットワーク内に展開されているNuGetサーバーにパッケージをプッシュします。

今、別のマシンで実行nuget install MyPackage -Source http://myserver/nugetします。これにより、明らかにNuGetパッケージがインストールされます。

MyPackageこの問題は、バージョンの-まだバージョンの別のアップデートをプッシュすると発生し1.0.0ます。クライアントマシンに再インストールしようとすると、以前のバージョンのパッケージが表示されます。

責任があるのはローカルキャッシュであることがわかりました。パッケージがインストールされている場合はローカルキャッシュに入り、次に同じバージョンのパッケージがインストールされると、キャッシュから取得されます。けっこうだ!

ただし、その一方で、コマンドの-NoCacheオプションがありnuget install、ローカルキャッシュを無視することを期待しています。

しかし、これは真実ではありません。で初めて実行すると-NoCache、キャッシュが更新され、真の最新バージョンがインストールされます。ただし、次回、-NoCacheオプションを使用しても、パッケージがキャッシュから取得されます。

期待されますか?バージョンが変更されていないためですか?

念のため、すべてのNuGet操作はNuGet.exePowerShellセッションを使用して実行されます。

更新:キャッシュの有効期限によってのみ説明できる奇妙な動作を観察します。パッケージがキャッシュされると、しばらく経つまでnuget install、キャッシュからパッケージをプルするための後続のすべての呼び出し。正確な期間はわかりませんでしたが、間違いなく1時間以上です。この後、キャッシュ内のパッケージを更新すると、状況は同じになります...nuget install

4

2 に答える 2

12

ヤン、

NuGet は、ダウンロードしたパッケージをローカル ハード ドライブにキャッシュします。Windows 7 マシンの場合、キャッシュは C:\Users\jmelosegui\AppData\Local\NuGet\Cache にあります。したがって、忘れたい nuget パッケージをローカル キャッシュ ディレクトリから削除できます。次にパッケージをインストールすると、サーバーから最新バージョンが取得されます。

ところで: @matthew-skelton に同意します。

特定のバージョンのパッケージを複数プッシュするべきではありません。パッケージは不変でなければなりません。パッケージ内の何かを変更した場合は、ビルド番号 abC を増やして、パッケージの新しいバージョンをプッシュします。

このアプローチがあなたのシナリオに合うことを願っています

于 2013-09-17T13:11:27.583 に答える
11

ヤン、

MyPackage の別の更新をプッシュします - まだ version1.0.0です。

特定のバージョンのパッケージを複数プッシュするべきではありません。パッケージは不変でなければなりません。パッケージ内の何かを変更した場合は、ビルド番号を増やしa.b.Cて、パッケージの新しいバージョンをプッシュしてください。

発生する動作は、特定のパッケージ バージョンを基本的に無期限にキャッシュできることを期待する NuGet の副作用です。

于 2013-08-16T20:41:29.167 に答える