Ubuntu下.NET6.0 NuGet包遇NU1701警告及CS0234错误求助
在Ubuntu系统下开发供其他项目引用的NuGet包,包与消费项目均基于.NET 6.0,各自的.csproj中都定义了<TargetFramework>net6.0</TargetFramework>,遇到以下问题:
- 打包NuGet包时无错误、警告,流程正常;
- 还原
.nupkg时触发NU1701警告:
warning NU1701: Package 'TestCore 1.0.0' was restored using '.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version=v4.7.1, .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8' instead of the project target framework 'net6.0'. This package may not be fully compatible with your project.
- 运行代码时触发CS0234错误:
The type or namespace name 'Core' does not exist in the namespace 'Verisoft' (are you missing an assembly reference?)
NuGet包的.csproj
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <PackageId>TestCore</PackageId> <Version>1.0.0</Version> <Authors>Nir Gallner</Authors> <Company>VeriSoft</Company> <TargetFramework>net6.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <IsPackable>true</IsPackable> <GeneratePackageOnBuild>true</GeneratePackageOnBuild> </PropertyGroup> <ItemGroup> <PackageReference Include="Allure.Commons" Version="3.5.0.73" /> <PackageReference Include="log4net" Version="2.0.14" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" /> <PackageReference Include="Microsoft.Playwright.NUnit" Version="1.22.0" /> <PackageReference Include="NUnit" Version="3.13.3" /> <PackageReference Include="Nunit.Allure" Version="1.2.1.1" /> <PackageReference Include="NUnit3TestAdapter" Version="4.2.1" /> <PackageReference Include="NUnit.Analyzers" Version="3.3.0" /> <PackageReference Include="coverlet.collector" Version="3.1.2" /> <PackageReference Include="RestSharp" Version="108.0.1" /> </ItemGroup> </Project>
消费项目的.csproj
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <IsPackable>false</IsPackable> </PropertyGroup> <ItemGroup> <PackageReference Include="Allure.Commons" Version="3.5.0.73" /> <PackageReference Include="log4net" Version="2.0.14" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" /> <PackageReference Include="Microsoft.Playwright.NUnit" Version="1.22.0" /> <PackageReference Include="NUnit" Version="3.13.3" /> <PackageReference Include="Nunit.Allure" Version="1.2.1.1" /> <PackageReference Include="NUnit3TestAdapter" Version="4.2.1" /> <PackageReference Include="NUnit.Analyzers" Version="3.3.0" /> <PackageReference Include="coverlet.collector" Version="3.1.2" /> <PackageReference Include="RestSharp" Version="108.0.1" /> <PackageReference Include="NUnit.ConsoleRunner" Version="3.15.2" /> <PackageReference Include="TestCore" Version="1.0.0" /> </ItemGroup> <ItemGroup> <None Update="allureConfig.json"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </None> <None Update="log4net.config"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </None> </ItemGroup> <ItemGroup> <Reference Include="TestCore"> <Path>./TestCoreBuilds</Path> </Reference> </ItemGroup> </Project>
1. 修复NU1701框架不匹配警告
该警告说明NuGet包被识别为.NET Framework兼容包,而非.NET 6.0包,解决步骤:
- 彻底清理并重新打包:
执行命令清理项目残留,重新生成包:dotnet clean dotnet restore dotnet pack --configuration Release - 明确声明包的目标框架:
在NuGet包的.csproj的<PropertyGroup>中添加以下配置,强制指定框架兼容性:<TargetFrameworks>net6.0</TargetFrameworks> <PackageTargetFallback>net6.0</PackageTargetFallback> <RuntimeIdentifiers>linux-x64;win-x64;osx-x64</RuntimeIdentifiers> - 排查依赖兼容性:
检查Nunit.Allure等依赖包是否仅支持.NET Framework,替换为兼容.NET 6.0的版本(例如升级到最新版Nunit.Allure)。
2. 修复CS0234命名空间不存在错误
该错误源于消费项目无法正确识别NuGet包中的命名空间,解决步骤:
- 移除引用冲突:
消费项目同时添加了NuGet包引用和本地程序集引用,导致冲突,删除本地引用的代码块:<!-- 删除此段 --> <ItemGroup> <Reference Include="TestCore"> <Path>./TestCoreBuilds</Path> </Reference> </ItemGroup> - 验证NuGet包内容:
解压生成的TestCore.1.0.0.nupkg,检查是否存在net6.0目录,且目录下有TestCore.dll;通过反编译工具确认dll中包含Verisoft.Core命名空间。 - 确认命名空间拼写:
检查NuGet包项目中的代码是否确实使用了Verisoft.Core命名空间,无拼写错误。
3. 最终验证
在消费项目中执行以下命令,强制清理并还原依赖:
dotnet clean dotnet restore --force
内容的提问来源于stack exchange,提问作者nir gallner

