2012-07-25 71 views
10

我已經給nuget添加了新的軟件包(我不是在將項目引用添加到項目中)。我已將新軟件包添加到服務器,以便其他人可以在其項目中使用/使用該軟件包。如何從服務器中刪除NuGet包?

說包名稱爲Parser1.0.0.0.nupkg

問題是我忘了添加一個依賴。現在我想再次編輯或刪除並添加正確的一個。但我不想更改其版本號。

任何人都知道該怎麼做?

回答

14

不支持永久刪除軟件包,但您可以控制它們的列表方式。 (假設你在談論nuget.org)。

登錄後,還有關於刪除包頁面的其他信息。例如https://nuget.org/packages/Parser/1.0.0.0/Delete

報價從刪除包頁的NuGet的解釋:

「爲什麼我不能刪除我的包 我們的政策是唯一永久刪除的NuGet包真的需要它,如包含口令的包,惡意/有害代碼等。此政策與其他包管理器(如Ruby Gems)採用的政策非常相似。

Unlisting程序包將刪除NuGet中的程序包,該程序包仍然可以下載爲依賴關係有三個主要原因。

其他軟件包可能取決於該軟件包。這些軟件包可能不一定在這個畫廊中。 確保使用NuGet而不提交包的人(包恢復)不會被破壞。 有助於確保重要的社區擁有的包沒有質量刪除。」

我建議unlisting以前的包,並添加依賴碰撞後的版本1.0.0.1。

+0

沒錯,OP可能不希望碰到的版本號,但是當你把你的包旋轉在公衆場合,你必須遵守交通規則。 – 2012-07-25 21:06:24

7

假設你管理一個私人NuGetGallery服務器有權訪問MSSQL服務器數據庫,您可以通過刪除圖庫知道它的存在來刪除該包。

您應該永遠不要使用這個,但爲了科學的利益,這裏是您如何忽略不要的理由(注意這會刪除全部版本一個名爲「MyNastyPackage」)封裝的S:

DECLARE @PackageRegistrationKey int 
SELECT @PackageRegistrationKey = [Key] 
FROM PackageRegistrations 
WHERE Id = 'MyNastyPackage' 

BEGIN TRANSACTION 
DELETE pf 
FROM [NuGetGallery].[dbo].[PackageFrameworks] pf 
JOIN Packages p ON pf.Package_Key = p.[Key] 
WHERE PackageRegistrationKey = @PackageRegistrationKey 
DELETE pa 
FROM [NuGetGallery].[dbo].[PackageAuthors] pa 
JOIN Packages p ON pa.PackageKey = p.[Key] 
WHERE PackageRegistrationKey = @PackageRegistrationKey 
DELETE gs 
FROM [NuGetGallery].[dbo].[GallerySettings] gs 
JOIN [PackageStatistics] ps ON gs.DownloadStatsLastAggregatedId = ps.[Key] 
JOIN Packages p ON ps.PackageKey = p.[Key] 
WHERE PackageRegistrationKey = @PackageRegistrationKey 
DELETE ps 
FROM [NuGetGallery].[dbo].[PackageStatistics] ps 
JOIN Packages p ON ps.PackageKey = p.[Key] 
WHERE PackageRegistrationKey = @PackageRegistrationKey 
DELETE pd 
FROM [NuGetGallery].[dbo].[PackageDependencies] pd 
JOIN Packages p ON pd.PackageKey = p.[Key] 
WHERE PackageRegistrationKey = @PackageRegistrationKey 
DELETE 
FROM [NuGetGallery].[dbo].[Packages] 
WHERE PackageRegistrationKey = @PackageRegistrationKey 
DELETE por 
FROM PackageOwnerRequests por 
JOIN PackageRegistrations pr ON pr.[Key] = por.PackageRegistrationKey 
WHERE pr.[Key] = @PackageRegistrationKey 
DELETE pro 
FROM PackageRegistrationOwners pro 
JOIN PackageRegistrations pr ON pr.[Key] = pro.PackageRegistrationKey 
WHERE pr.[Key] = @PackageRegistrationKey 
DELETE FROM PackageRegistrations 
WHERE [Key] = @PackageRegistrationKey 
COMMIT TRANSACTION 
+0

查看此腳本的變體(多個軟件包,特定軟件包版本):https://gist.github.com/grenade/4a8b6edcd10308a5882f) – grenade 2015-02-26 14:31:41

0

那麼,你的具體情況您可以通過手動編輯.nuspec文件,如果你有你的NuGet服務器的訪問添加一個依賴。打開Nuget服務器的數據目錄(存儲它的.nupkg文件的位置),找到軟件包並使用NugetPackageExplorer工具或手動編輯元數據(.nupkg文件是一個zip壓縮文件,打開它並編輯YourPackageName.nuspec文件以添加依賴)。 它看起來像類似於這樣:

<dependencies> 
    <dependency id="RouteMagic" version="1.1.0" /> 
    <dependency id="RouteDebugger" version="1.0.0" /> 
</dependencies> 
1

如果單擊在包的子菜單中刪除包(左側),您將被重定向到另一個頁面告訴你:

如果你需要永久移除軟件包,請點擊聯繫支持鏈接,我們將爲你處理它

至於我這個工作完全沒問題,我聯繫了支持請求因爲我無意中將其上傳到生產性的NuGet服務器而不是暫存環境,所以請將我的軟件包刪除。

但是,我總是建議首先使用staging.nuget.com測試您的軟件包。然後,您可以在Visual Studio中將登臺環境添加爲包資源庫進行測試。

1

私人NuGet服務器是可能的。使用NuGet刪除命令。

nuget delete MyPackage 1.0