多目标框架NuGet打包失败,单框架配置正常,求助排查问题
NuGet打包多目标框架项目时出现路径重复错误(NU5012)
我之前也碰到过一模一样的问题——多目标框架项目用nuget pack打包就报NU5012,提示找不到那种嵌套重复的路径,单目标就完全正常,加-build参数也解决不了。结合你的场景,给你几个靠谱的解决方案:
1. 改用dotnet pack命令(最推荐)
传统的nuget.exe pack对多目标项目的路径解析一直有点坑,而.NET SDK自带的dotnet pack是原生支持多目标场景的,处理路径问题要可靠得多。直接执行这个命令就行:
dotnet pack "C:\Repos\Random\TestStuff\TestPackaging\TestPackaging.csproj" -c Debug
如果需要指定NuGet包的输出目录,加上-o参数:
dotnet pack "C:\Repos\Random\TestStuff\TestPackaging\TestPackaging.csproj" -c Debug -o "C:\Your\Desired\Output\Folder"
2. 坚持用nuget.exe的话,手动修正路径参数
问题的根源是nuget pack在多目标模式下错误拼接了输出路径,把项目名称又嵌套了一层。你可以通过手动指定参数来规避这个问题:
方式一:命令行指定输出和基础路径
nuget pack "C:\Repos\Random\TestStuff\TestPackaging\TestPackaging.csproj" -Build -OutputDirectory "C:\Repos\Random\TestStuff\TestPackaging\bin\Debug" -BasePath "C:\Repos\Random\TestStuff\TestPackaging\bin\Debug"
方式二:在csproj中添加路径配置
直接在项目文件的<PropertyGroup>里加一行,强制指定包输出路径,避免嵌套:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <OutputType>Library</OutputType> <TargetFrameworks>net452;netstandard2.0</TargetFrameworks> <NuGetPackageImportStamp /> <!-- 新增这一行,让包输出到和编译产物相同的路径 --> <PackageOutputPath>$(OutputPath)</PackageOutputPath> </PropertyGroup> </Project>
改完之后再执行原来的nuget pack命令,应该就能正常打包了。
3. 检查自定义输出路径配置
如果你的项目里手动设置了OutputPath(比如改成了bin\$(Configuration)\$(AssemblyName)\这种带项目名的路径),那多目标场景下就很容易出现路径嵌套重复的问题。建议把OutputPath改回默认的bin\$(Configuration)\,或者调整PackageOutputPath来匹配你的自定义路径。
简单来说,就是传统nuget.exe对多目标的路径处理不够智能,要么换用更适配的dotnet pack,要么手动修正路径配置,就能解决这个NU5012错误了。
内容的提问来源于stack exchange,提问作者Shawnas
相关产品推荐
相关产品推荐

