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

NuGet本地源存在同一包两个版本时失效问题排查与解决

问题描述

我尝试使用NuGet本地源发布包,操作流程及遇到的问题如下:

  1. NuGet配置(nuget.config):
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget" value="https://api.nuget.org/v3/index.json" />
    <add key="Microsoft Visual Studio Offline Packages" value="C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\" />
    <add key="local feed" value="x:\nuget\packages\" />
  </packageSources>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <bindingRedirects>
    <add key="skip" value="False" />
  </bindingRedirects>
  <packageManagement>
    <add key="format" value="0" />
    <add key="disabled" value="False" />
  </packageManagement>
</configuration>
  1. SDK项目配置:
<PropertyGroup>
  <TargetFramework>net6.0</TargetFramework>
  <Nullable>enable</Nullable>
  <ImplicitUsings>enable</ImplicitUsings>
  <Title>My custom component</Title>
  <Version>0.0.1-alpha</Version>
  <PackageId>$(RootNamespace)</PackageId>
</PropertyGroup>
  1. 初始操作正常:
    将项目设为Release配置执行Pack命令,生成.nupkg后通过包管理器控制台执行:
nuget add pathToNupkgFile -Source x:\nuget\packages

包成功存入x:\nuget\packages\companyname.components.blazor.mycomponent\0.0.1-alpha,新建解决方案引用该本地源包一切正常。

  1. 多版本共存时出错:
    按相同流程创建并添加0.0.2-alpha版本包到本地源后,在Manage NuGet Packages for Solution(MNPfS)中浏览本地源时显示“Error occurred”,错误列表提示:

Error [local feed] '.', hexadecimal value 0x00, is an invalid character. Line 1, position 1.

删除0.0.1-alpha版本后,本地源可正常浏览并安装新版本,仅同一包存在两个版本时触发问题。

原因分析

这个错误的核心是本地文件夹式NuGet源的自动生成索引文件损坏:

  • 使用nuget add命令添加多版本包时,可能因磁盘IO异常、进程占用、旧版NuGet的索引生成bug,导致索引文件(如index.json或缓存文件)写入了空字符(0x00)
  • 预发布版本(如-alpha)的索引处理逻辑在旧版NuGet中存在兼容性问题,多版本共存时容易触发索引解析异常
解决方法

1. 重建本地源索引

  • 关闭所有Visual Studio实例及NuGet相关进程(如nuget.exe、dotnet.exe)
  • 进入本地源目录x:\nuget\packages,删除所有缓存文件:包括.nupkg.cache后缀文件、隐藏的index.json文件,以及自动生成的packages.config(若存在)
  • 重新打开Visual Studio,刷新NuGet包源,NuGet会重新生成正确的索引文件

2. 改用dotnet nuget push替代nuget add

nuget add命令对多版本包的索引更新逻辑不够严谨,推荐使用官方标准的推送命令:

dotnet nuget push pathToNupkgFile --source x:\nuget\packages

该命令会规范更新本地源索引,避免手动添加导致的损坏问题。

3. 升级NuGet版本

若使用的是NuGet 5.x及以下版本,升级到最新稳定版(NuGet 6.x+),新版本修复了大量本地源多版本索引的bug,对预发布版本的兼容性更好。

4. 确认版本格式合规

确保包版本号符合SemVer规范,虽然0.0.1-alpha是合法格式,但保持版本号的一致性(如统一预发布标签格式),可降低索引生成异常的概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:45:39