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

Linux下NuGet打包缺失lib目录求助(Windows正常)

问题解决:Linux下NuGet 2.8.7打包后缺少lib目录及DLL

核心原因

NuGet 2.8.7.0是非常老旧的版本(发布于2015年),完全不支持2017年推出的.NET Standard 2.0,同时跨平台路径处理、打包逻辑存在诸多局限性,这是导致打包后丢失lib目录和DLL的主要原因。Windows下使用的NuGet 6.1.0是现代版本,对.NET Standard和跨平台支持完善,因此能正常工作。

解决方案

1. 升级Linux上的NuGet版本(推荐)

这是最彻底的解决办法,步骤如下:

  • 安装包含最新版NuGet的.NET SDK:
    sudo apt update
    sudo apt install dotnet-sdk-7.0
    
  • 验证NuGet版本:
    dotnet nuget --version
    
  • 使用dotnet pack命令替代旧的nuget pack:
    dotnet pack <myproject>.nuspec -p:Version=4.4.4
    
    若项目有.csproj文件,直接打包项目更可靠:
    dotnet pack <myproject>.csproj -c Release -p:Version=4.4.4
    

2. 验证文件路径正确性(临时排查)

如果暂时无法升级,先确认路径是否正确:

  • 在执行nuget pack的目录下,运行以下命令检查DLL是否存在:
    ls ../../_Out/Release/myProject.Energy.Emulation.dll
    
    若提示文件不存在,说明相对路径错误,需调整nuspec中的src路径。
  • 尝试将src改为绝对路径测试,例如:
    <file src="/home/your-user/your-project/_Out/Release/myProject.Energy.Emulation.dll" target="lib/netstandard2.0"/>
    

3. 规避旧版本对.NET Standard的不支持(仅临时方案)

由于NuGet 2.8.7不识别netstandard2.0,可尝试将目标框架改为旧版本兼容的名称,但这会破坏包的兼容性,仅用于排查问题:

<file src="../../_Out/Release/myProject.Energy.Emulation.dll" target="lib/net45"/>

验证结果

打包完成后,用unzip解压NuGet包验证:

unzip myProject.Emulation.SPI.Virtual.4.4.4.nupkg -d test-package
ls test-package/lib/netstandard2.0/

若能看到DLL文件,说明问题解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:15:16