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:
若项目有.csproj文件,直接打包项目更可靠:dotnet pack <myproject>.nuspec -p:Version=4.4.4dotnet pack <myproject>.csproj -c Release -p:Version=4.4.4
2. 验证文件路径正确性(临时排查)
如果暂时无法升级,先确认路径是否正确:
- 在执行
nuget pack的目录下,运行以下命令检查DLL是否存在:
若提示文件不存在,说明相对路径错误,需调整nuspec中的ls ../../_Out/Release/myProject.Energy.Emulation.dllsrc路径。 - 尝试将
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
相关产品推荐
相关产品推荐

