You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅镜像指定所有者的NuGet包?能否按所有者筛选镜像nuget.com包

当然可行!按所有者筛选来镜像NuGet包是完全可以实现的,具体做法取决于你使用的镜像工具。下面我会针对几种常用工具给出实操方案:

1. 使用BaGet(轻量开源NuGet服务器)

BaGet是目前比较受欢迎的轻量NuGet镜像工具,它原生支持按所有者筛选同步。你只需要修改配置文件即可:

打开appsettings.json,找到Mirror节点,添加OwnerFilter配置:

{
  "Mirror": {
    "Enabled": true,
    "Source": "https://api.nuget.org/v3/index.json",
    "OwnerFilter": ["YourTargetOwnerName"],
    "PackageRetention": "LatestVersion" // 可选,比如只保留最新版本,节省空间
  }
}

保存配置后重启BaGet服务,它就只会同步指定所有者发布的包了。如果需要多个所有者,直接在数组里添加更多名称即可。

2. 使用NuGet.Server(官方基础服务器)

NuGet.Server本身没有内置的筛选同步功能,但你可以通过自定义代码来实现。核心思路是利用NuGet的官方API查询指定所有者的包,然后下载到本地仓库:

首先,创建一个控制台项目,引用NuGet.Protocol和NuGet.Common包,然后编写类似下面的代码:

using NuGet.Common;
using NuGet.Protocol;
using NuGet.Protocol.Core.Types;
using NuGet.Versioning;

var targetOwner = "YourTargetOwnerName";
var localRepoPath = @"C:\NuGetServer\Packages"; // NuGet.Server的包存储路径
var logger = NullLogger.Instance;
var cache = new SourceCacheContext();

// 创建NuGet源
var repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");

// 获取搜索资源
var searchResource = await repository.GetResourceAsync<PackageSearchResource>();

// 搜索指定所有者的所有包
var searchFilter = new SearchFilter(includePrerelease: false);
searchFilter.Owners.Add(targetOwner);

var results = await searchResource.SearchAsync(
    "", // 空搜索表示匹配所有包
    searchFilter,
    skip: 0,
    take: int.MaxValue,
    logger,
    CancellationToken.None);

// 下载每个包到本地仓库
foreach (var result in results)
{
    var packageId = result.Identity.Id;
    var latestVersion = result.Identity.Version;

    var packageDownloader = await repository.GetResourceAsync<PackageDownloaderResource>();
    var downloadResult = await packageDownloader.DownloadPackageAsync(
        result.Identity,
        new PackageDownloadContext(cache),
        localRepoPath,
        logger,
        CancellationToken.None);

    Console.WriteLine($"下载完成: {packageId} {latestVersion}");
}

你可以把这段代码做成定时任务(比如Windows任务计划或Linux Cron),定期同步最新的包。

3. 使用Nexus Repository(企业级仓库管理)

如果你用的是Nexus这类企业级工具,配置起来也很简单:

  • 创建一个NuGet代理仓库,指向nuget.com的官方源
  • 在仓库的“Advanced”设置里,找到“Custom Query Parameters”,添加owner=YourTargetOwnerName
  • 保存配置后,Nexus在代理请求时会自动带上这个筛选条件,只会返回指定所有者的包

另外,你也可以通过Nexus的任务功能,设置定期同步指定所有者的包,确保本地仓库始终是最新的。

注意事项

  • 有些包可能有多个所有者,如果你想匹配“包含指定所有者”的包,大部分工具的筛选逻辑都是满足的;如果需要“仅指定所有者”的包,可能需要额外确认工具的筛选规则
  • 如果需要同步预发布版本,记得在配置或代码里开启对应的选项
  • 定期检查同步日志,确保没有因为API限制或网络问题导致同步失败

内容的提问来源于stack exchange,提问作者user2419860

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:35:39