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

生成NuGet包(.nupkg)时报错提示待打包dll文件在磁盘不存在

问题根因

报错本质是NuGet打包时查找dll的路径和项目实际生成dll的路径不匹配:

  1. 你在csproj中配置的OutDir引用了未正确赋值的$(DIstributionDir)变量(变量名存在大小写/拼写问题,未被正确定义),生成操作时SDK会自动回退到默认输出路径所以能正常编译,但nuget.exe pack不会做这个回退逻辑,会硬编码按照默认路径规则拼接dll查找路径,最终找不到文件。
  2. 你配置中的<ProductReferenceAssemblyInOutDir>存在拼写错误,正确属性名为<ProduceReferenceAssemblyInOutDir>,该配置错误会干扰程序集输出逻辑。
解决步骤
  • 修正csproj配置错误
    首先修正属性拼写问题,如果没有特殊自定义输出目录的需求,直接删除自定义的OutDir配置,使用SDK默认输出规则即可,修正后的基础配置如下:
    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
        <ProduceReferenceAssemblyInOutDir>true</ProduceReferenceAssemblyInOutDir>
      </PropertyGroup>
    </Project>
    
    如果你确实需要自定义输出目录,显式给OutDir赋值为确定的路径,不要引用未定义的变量。
  • 替换打包命令
    不建议直接使用独立的nuget.exe pack打包SDK风格的项目,改用.NET SDK内置的打包命令,在项目根目录执行:
    dotnet pack -c Release
    
    该命令会自动读取csproj中的所有输出路径配置,从实际dll生成位置读取文件打包,不会出现路径不匹配问题。
  • 兼容nuget.exe的处理方式
    如果必须使用v6.2.0版本的nuget.exe打包,执行打包命令时需要显式传入OutDir参数,指定dll实际所在的目录:
    nuget pack MyApi.csproj -Properties OutDir=./bin/Release/netstandard2.0/
    
    注意路径要替换成你实际编译后dll所在的完整路径。

排查验证技巧:先执行清理命令dotnet clean,再执行dotnet build,确认编译完成后dll所在的实际磁盘路径,再执行打包操作,避免obj目录下的旧缓存文件干扰路径判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:30:54