如何使用Dotnet CLI在无项目文件时下载NuGet包?
解决跨平台用Dotnet CLI替代NuGet.exe还原指定包的问题
方法1:直接使用dotnet nuget install命令(无需项目文件)
这是最直接的替代方案,不需要任何项目文件,直接指定包名、版本和输出目录即可完成下载:
# 安装单个指定包 dotnet nuget install package.a -v X.Y.Z -o ./Dependencies dotnet nuget install package.b -v A.B.C -o ./Dependencies
如果packages.config里的包数量较多,可以写个简单脚本批量处理。比如Shell脚本示例:
#!/bin/bash OUT_DIR="./Dependencies" mkdir -p $OUT_DIR # 解析packages.config提取包名和版本 grep -E '<package id=".*" version=".*"' packages.config | while read -r line; do PACKAGE_ID=$(echo $line | sed -E 's/.*id="([^"]+)".*/\1/') PACKAGE_VERSION=$(echo $line | sed -E 's/.*version="([^"]+)".*/\1/') echo "Installing $PACKAGE_ID v$PACKAGE_VERSION..." dotnet nuget install $PACKAGE_ID -v $PACKAGE_VERSION -o $OUT_DIR done
方法2:创建极简CSPROJ文件(避免额外框架依赖)
如果不想写脚本,可以创建一个极简的CSPROJ文件,通过配置禁用隐式框架引用,就能避免自动下载microsoft.netcore.platforms、netstandard.library这类额外包:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <!-- 指定最低兼容的TargetFramework,比如netstandard2.0 --> <TargetFramework>netstandard2.0</TargetFramework> <!-- 禁用隐式框架引用,避免下载额外框架依赖包 --> <DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences> </PropertyGroup> <ItemGroup> <PackageReference Include="package.a" Version="X.Y.Z" /> <PackageReference Include="package.b" Version="A.B.C" /> </ItemGroup> </Project>
然后运行还原命令:
dotnet restore --packages ./Dependencies
为什么之前的尝试失败?
dotnet restore命令是针对项目文件(CSPROJ/SLN)设计的,不支持直接将packages.config作为配置文件参数。而你之前用的含PackageReference的文件,因为没有禁用隐式框架引用,会自动引入.NET标准库的相关依赖,所以才会下载额外包。
内容的提问来源于stack exchange,提问作者fharreau
相关产品推荐
相关产品推荐

