如何从服务器上删除NuGet包?

时间:2012-07-25 16:46:02

标签: package nuget

我已经为nuget添加了新的包(我不是在谈论将包的引用添加到项目中)。我已经向服务器添加了新的包,以便其他人可以在他们的项目中使用/使用该包。

说包名是Parser1.0.0.0.nupkg

问题是我忘了添加一个依赖项。现在我想编辑或删除并再次添加正确的。但我不想更改其版本号。

任何人都知道怎么做?

6 个答案:

答案 0 :(得分:15)

不支持永久删除软件包,但您可以控制它们的列出方式。 (假设你在谈论nuget.org)。

登录后,删除包页面上有其他信息。例如https://nuget.org/packages/Parser/1.0.0.0/Delete

从删除包页面引用nuget的说明:

“为什么我不能删除我的包裹? 我们的政策是永久删除真正需要它的NuGet包,例如包含密码,恶意/有害代码等的包。此策略与其他包管理器(如Ruby Gems)采用的策略非常相似。

取消列出该程序包将删除该程序包在NuGet中可用。由于三个主要原因,该程序包仍可作为依赖项下载。

其他包可能取决于该包。这些包可能不一定在这个库中。 确保在不提交包(包恢复)的情况下使用NuGet的人不会被破坏。 帮助确保重要的社区拥有的包不会被大规模删除。“

我建议在添加依赖项后取消列出以前的软件包并将版本提升到1.0.0.1。

答案 1 :(得分:7)

假设您管理私有NuGetGallery服务器并且可以访问MSSQL Server数据库,则可以通过删除该库知道​​其存在来删除该包。

你可能永远不应该使用这个,但为了科学的利益,这里是你如何忽视不要的好理由(注意这将删除名为'MyNastyPackage'的包的所有版本) :

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

答案 2 :(得分:4)

私有NuGet服务器是可能的。使用NuGet删除命令。

nuget delete MyPackage 1.0

更新:这仍然无法解决OP的问题,因为它不允许您重复使用版本号,因为它仍然被服务器锁定。没有安全的方法来永久删除特定版本的软件包。

答案 3 :(得分:1)

如果您点击包的子菜单(左侧)中的删除包,您将被重定向到另一个页面,告诉您:

  

如果您需要永久删除该软件包,请单击“联系支持”链接,我们将为您处理

至于我,这完全没问题,我联系了支持请求我的包被删除,因为我意外地将它上传到高效的NuGet服务器而不是登台环境。

但是,我总是建议您先使用staging.nuget.com测试您的软件包。然后,您可以将暂存环境作为包存储库添加到Visual Studio中进行测试。

答案 4 :(得分:0)

嗯,在您的特定情况下,如果您有权访问您的nuget服务器,则可以通过手动编辑.nuspec文件来添加依赖项。打开nuget服务器的数据目录(存储其.nupkg文件的位置),找到包并使用NugetPackageExplorer工具或手动编辑元数据(.nupkg文件是zip存档,打开它并编辑YourPackageName.nuspec文件以添加一个依赖)。 它看起来像这样:

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

答案 5 :(得分:0)

成功发布后,您会收到NuGet的电子邮件。

关注此电子邮件,因为他们在其中写道:

If this was not intended, please "contact support".

如果您单击“联系支持”,则该链接将与NuGet中的软件包管理链接在一起,您可以在其中给出为什么要删除它的原因,然后执行删除操作。

仅此而已!