10

会社用にカスタムNuGet サーバーをセットアップしました。それはすべてうまく機能します-私はパッケージを公開したり、表示したりできます.

私の唯一の懸念は、同じ名前とバージョン番号のパッケージを公開して、既存のパッケージを上書きできることです。これは理想的ではありません。同じ名前とバージョンのパッケージが既に存在する場合、NuGet サーバーがエラーを返すようにしたいと考えています。

これを達成する方法についての手がかりはありますか?

4

3 に答える 3

9

また、既存のパッケージの上書きを禁止していただけると非常にありがたいです。ただし、NuGet サーバーをそのまま使用することはできないようです。同様の機能のリクエストは、約 2 年前にクローズされました。

しかし、ソース コードを見ると、いくつかのオプションが開かれます。CreatePackage() メソッドを見てください。IPackageAuthenticationServiceを使用して、指定されたパッケージの追加が許可されているかどうかを確認し (API キーのみを確認します)、IServerPackageRepositoryを使用して実際にパッケージを追加します。

// Make sure they can access this package
if (Authenticate(context, apiKey, package.Id))
{
    _serverRepository.AddPackage(package);
    WriteStatus(context, HttpStatusCode.Created, "");
}

どちらもコンストラクター注入を使用して渡されるため、カスタム実装を渡すことで動作を簡単に拡張できます (そのためにNinject バインディングを変更します)。

一見すると、カスタムIServerPackageRepositoryに行きます。現在の実装では、IFileSystem.AddFile(...)を使用してパッケージを追加します。IFileSystem.FileExists(...)を使用して、パッケージが既に存在するかどうかを確認できます。

NuGet はSemantic Versioningに従っているため、継続的インテグレーションの観点からは、既存のパッケージの上書きを禁止することは完全に理にかなっています。したがって、新しいビルドには、バグ修正、新機能、または重大な変更を組み込む必要があります。ただし、スナップショット/プレリリースの上書きを許可することを選択します。

更新: v2.8 には、下位互換性のためにデフォルトで true に設定されているオプションallowOverrideExistingPackageOnPushがあるようです。1e7345624d でコミットされています。フォークした後に気づきました。私はまた遅すぎたようです;-)

于 2013-07-21T21:23:47.503 に答える