如何无需构建项目获取.NET SDK项目的NuGet依赖DLL清单
解决方案
方法1:通过dotnet命令组合定位依赖DLL
- 第一步:获取目标包的直接/传递依赖及版本
执行dotnet list <项目路径> package --include-transitive --filter "包A|包B|包C",替换为你指定的3个包ID,命令会输出所有关联包的精确版本号及依赖关系。 - 第二步:定位具体框架的DLL文件
- 用
dotnet nuget locals global-packages --list获取NuGet全局缓存路径; - 直接读取项目.csproj文件中的
<TargetFramework>节点值(如net6.0); - 拼接路径:
缓存路径/<包ID>/<版本号>/lib/<目标框架>/xxx.dll,该路径下的DLL即为会被复制到输出目录的文件。
- 用
方法2:利用MSBuild目标获取输出文件清单(无需完整构建)
- 执行
dotnet msbuild <项目路径> /t:GetCopyToOutputDirectoryItems /p:SkipNonexistentProjects=true /fl:v=detailed,该命令触发MSBuild计算待复制到输出目录的文件,但不会执行编译、资源生成等完整构建步骤; - 打开生成的
msbuild.log文件,筛选CopyToOutputDirectory属性为True的条目,同时排除路径包含项目自身输出目录、ProjectReference项目路径的条目,剩余条目即为NuGet依赖的DLL文件。
方法3:指定框架执行NuGet Restore
- 执行
nuget restore <项目路径> -p:TargetFramework=<你的目标框架> -PackagesDirectory ./temp-nuget-packages,通过-p:TargetFramework明确指定项目目标框架,NuGet会仅下载适配该框架的包文件到临时目录,直接查看./temp-nuget-packages下对应包的lib/<目标框架>目录即可得到要复制的DLL清单。
内容的提问来源于stack exchange,提问作者Martin Ba
相关产品推荐
相关产品推荐

