Tôi cũng sẽ đánh giá cao việc không cho phép ghi đè các gói hiện có. Tuy nhiên, dường như không thể sử dụng máy chủ NuGet ra khỏi hộp. A similar feature request has been closed about two years ago.
Nhưng nhìn vào source code sẽ mở ra một số tùy chọn. Hãy xem CreatePackage() -method. Nó sử dụng một IPackageAuthenticationService để kiểm tra xem mức khoán quy định được phép được bổ sung (chỉ kiểm tra chính API) và một IServerPackageRepository để thực sự thêm gói:
// Make sure they can access this package
if (Authenticate(context, apiKey, package.Id))
{
_serverRepository.AddPackage(package);
WriteStatus(context, HttpStatusCode.Created, "");
}
Cả hai đều thông qua việc sử dụng constructor injection để thật dễ dàng để mở rộng hành vi bằng cách chuyển các triển khai tùy chỉnh (Sửa đổi Ninject bindings cho điều đó).
Ngay từ cái nhìn đầu tiên, tôi sẽ chuyển đến IServerPackageRepository tùy chỉnh. Triển khai hiện tại sử dụng IFileSystem.AddFile (...) để thêm gói. Bạn có thể sử dụng IFileSystem.FileExists (...) để kiểm tra xem gói đã tồn tại chưa.
Từ góc độ tích hợp liên tục, điều này hoàn toàn có ý nghĩa khi không cho phép ghi đè gói hiện tại vì NuGet theo dõi Semantic Versioning. Do đó, một bản dựng mới nên kết hợp một bugfix, một tính năng mới hoặc một thay đổi đột phá. Tuy nhiên, tôi sẽ chọn cho phép ghi đè ảnh chụp nhanh/bản phát hành trước.
Cập nhật: Dường V2.8 sẽ có một tùy chọn allowOverrideExistingPackageOnPush mặc định là đúng đối với khả năng tương thích ngược. Nó đã được đính kèm với 1e7345624d. Tôi nhận ra rằng sau khi làm việc. Dường như tôi đã quá muộn lần nữa ;-)
Cập nhật: Trong 2 năm qua tôi đã sử dụng [Klondike] (https://github.com/themotleyfool/Klondike) hỗ trợ ootb này. Thật tuyệt vời. – mkoertgen