.NET Core 3.1项目B构建出现包还原框架不匹配警告求助
问题根源
项目A打包成NuGet包时,要么没正确配置.NET Core 3.1的目标框架,要么打包缓存里残留了旧框架的无效数据;另外项目B恢复包时,可能优先拉取到了适配其他框架的包版本。
一步步解决
检查项目A的.csproj配置
打开项目A的.csproj文件,确保里面明确指定TargetFramework为netcoreapp3.1,不要混杂其他框架配置。示例配置:<PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> <GeneratePackageOnBuild>true</GeneratePackageOnBuild> <!-- 若开启自动打包功能 --> </PropertyGroup>同时确认项目A中引用的所有NuGet包都支持netcoreapp3.1,避免引用仅支持net5.0及以上版本的包。
清理项目A的打包缓存
手动删除项目A的bin和obj文件夹,再重新构建并打包。旧缓存很容易导致生成的NuGet包携带错误的框架信息。清理项目B缓存并重新恢复包
如果项目B是从本地NuGet源引用项目A的包,先确认本地源里的包是最新构建的版本。然后删除项目B的bin/obj文件夹,再删掉用户目录下%userprofile%\.nuget\packages中对应packageId的文件夹,最后执行命令:dotnet clean dotnet restore检查生成的NuGet包内容
用NuGet包资源管理器打开项目A生成的.nupkg文件,查看其中的.nuspec文件,确认<dependencies>节点下的所有包都适配netcoreapp3.1,没有错误指定框架版本。给项目B添加强制恢复配置
在项目B的.csproj中添加以下配置,强制NuGet只拉取适配netcoreapp3.1的包版本:<PropertyGroup> <RestorePackagesWithLockFile>true</RestorePackagesWithLockFile> </PropertyGroup> <ItemGroup> <PackageReference Include="packageId" Version="x.x.x" /> <!-- 明确指定项目A包的版本号 --> </ItemGroup>
额外提醒
如果项目A使用了跨框架的包,要确认这些包的版本支持netcoreapp3.1,有些包的新版本已经放弃对旧框架的支持,这种情况需要降级到兼容版本。
内容的提问来源于stack exchange,提问作者S2K

