Ich würde es auch sehr schätzen, die bestehenden Pakete nicht zu überschreiben. Es ist jedoch nicht möglich, den NuGet-Server sofort zu verwenden. A similar feature request has been closed about two years ago.
Aber Blick auf die source code öffnet einige Optionen. Werfen Sie einen Blick auf die CreatePackage() -Methode. Es verwendet eine IPackageAuthenticationService zu überprüfen, ob das angegebene Paket hinzugefügt werden darf (nur überprüft den API Key) und ein IServerPackageRepository, um tatsächlich das Paket hinzufügen:
// Make sure they can access this package
if (Authenticate(context, apiKey, package.Id))
{
_serverRepository.AddPackage(package);
WriteStatus(context, HttpStatusCode.Created, "");
}
Beide werden sie mit dem Konstruktor Injektion geführt, so Es ist einfach, das Verhalten zu erweitern, indem Sie benutzerdefinierte Implementierungen übergeben (Ändern Sie dafür die Ninject bindings).
Auf den ersten Blick würde ich für eine benutzerdefinierte gehen IServerPackageRepository. Die aktuelle Implementierung verwendet IFileSystem.AddFile (...), um das Paket hinzuzufügen. Sie können IFileSystem.FileExists (...) verwenden, um zu überprüfen, ob das Paket bereits vorhanden ist.
Aus kontinuierlicher Integrationsperspektive ist es absolut sinnvoll, ein bestehendes Paket nicht zu überschreiben, da NuGet Semantic Versioning folgt. Daher sollte ein neuer Build einen Bugfix, eine neue Funktion oder eine brechende Änderung enthalten. Ich würde jedoch erlauben, Snapshots/Pre-Releases zu überschreiben.
Update: Es scheint v2.8 eine Option allowOverrideExistingPackageOnPush die standardmäßig auf true für die Abwärtskompatibilität haben. Es wurde mit 1e7345624d verbunden. Das habe ich nach dem Abzweigen erkannt. Scheint, ich war wieder zu spät ;-)
Update: Seit den letzten 2 Jahren habe ich [Klondike] (https://github.com/themotleyfool/Klondike) verwendet, die diese ootb unterstützt. Es ist großartig. – mkoertgen