这个错误是新版 NuGet 客户端(6.12+ / .NET 9 SDK)默认强制 HTTPS 导致的,内网 HTTP 源需要在 NuGet.Config 里显式声明允许。有三种配置位置,任选一种:

方法一:命令行直接改(推荐,最快)

在你当前机器上执行一次:

dotnet nuget add source http://192.168.1.1:8624/nuget/InternalNuget/v3/index.json -n ProGet --allow-insecure-connections

如果之前已经加过这个源,改用 update

dotnet nuget update source ProGet --allow-insecure-connections

执行完后重新 push 就不会再报错了。

方法二:手动编辑配置文件

NuGet.Config 有三个层级,放在哪里取决于作用范围:

机器级(对当前用户所有项目生效,最常用):

C:\Users\你的用户名\AppData\Roaming\NuGet\NuGet.Config

打开这个文件(没有就新建),内容改成:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="ProGet"
         value="http://192.168.1.1:8624/nuget/InternalNuget/v3/index.json"
         allowInsecureConnections="true" />
    <add key="nuget.org"
         value="https://api.nuget.org/v3/index.json" />
  </packageSources>
</configuration>

关键就是源标签上那个 allowInsecureConnections="true" 属性。

项目级(只对某个解决方案生效,团队共享用):

在解决方案根目录(和 .sln 同级)放一个 NuGet.config,内容同上。这样团队成员拉代码后不用再各自配,适合团队场景。

配置层级关系:项目级会合并并覆盖机器级的同名配置。

方法三:push 命令直接带参数(临时用)

如果你用的是较新的 .NET SDK(9.0.200+),push 命令本身就支持这个开关:

dotnet nuget push MyCompany.MyTool.1.0.0.nupkg \
  --source http://192.168.1.1:8624/nuget/InternalNuget/v3/index.json \
  --api-key 你的密钥 \
  --allow-insecure-connections

不用改任何配置文件,但每次 push 都要带,适合一次性操作。

建议

  • 个人开发机:用方法一,一次配置永久生效。
  • 团队多人使用:把带 allowInsecureConnectionsNuGet.config 提交到 Git 仓库根目录,所有人开箱即用。
  • 长期方案:以后有条件可以在 Nginx 前面加个自签名或内网 CA 的 HTTPS 证书,就不用每个客户端都配这个了——但内网场景 HTTP 完全够用,不必折腾。

配完再跑一次 push 命令就能上去了。