VS2019解决方案中如何从公共项目继承NUnit等NuGet包引用
实现NUnit包传递引用的操作方案
针对SDK风格项目(.NET Core/.NET 5+、SDK格式的.NET Framework项目)
这种项目格式默认支持NuGet包传递引用,只需要调整NUnit包的私有配置即可:
- 右键NUnitHelper项目,选择「管理NuGet程序包」
- 找到已安装的NUnit包,将
PrivateAssets属性设置为none即可。如果配置不生效,可以手动编辑项目文件:右键NUnitHelper项目选择「编辑项目文件」,修改NUnit的PackageReference节点为如下格式:
<PackageReference Include="NUnit" Version="你实际使用的NUnit版本号"> <PrivateAssets>none</PrivateAssets> </PackageReference>
配置完成后,所有引用了NUnitHelper的项目都会自动继承NUnit包引用,无需单独安装。
针对非SDK风格的.NET Framework项目(使用packages.config管理依赖)
这种旧格式默认不支持传递引用,可选择两种处理方式:
- 方案1:将所有相关项目迁移为SDK风格格式,是长期最优方案,后续所有NuGet依赖都原生支持传递引用
- 方案2:手动修改NUnitHelper的项目文件(.csproj),找到NUnit的引用节点,将
Private属性设置为False:
<Reference Include="nunit.framework, Version=你实际使用的版本号, Culture=neutral, PublicKeyToken=2638cd05610d4443, processorArchitecture=MSIL"> <HintPath>..\packages\NUnit.你实际使用的版本号\lib\对应.NET框架版本\nunit.framework.dll</HintPath> <Private>False</Private> </Reference>
配置完成后,其他项目引用NUnitHelper时会自动连带复制NUnit的程序集到输出目录,可正常调用相关功能。
你提到的旧版NuGet的「manage」功能是早期的解决方案级包管理能力,目前已经被传递引用机制替代。如果需要全解决方案统一管控包版本,还可以在解决方案根目录添加
Directory.Packages.props文件集中管理所有包版本,所有项目引用包时无需单独指定版本号,能彻底避免依赖版本分散的问题。
内容的提问来源于stack exchange,提问作者Richard Gale
相关产品推荐
相关产品推荐

