如何从引用Xunit的单元测试项目生成Nuget包
问题根本原因
.NET SDK 及 Visual Studio 内部存在默认规则:只要项目引用了 xunit 核心 NuGet 包,就会自动将项目标记为单元测试项目,测试项目默认会禁用 NuGet 打包逻辑,哪怕手动勾选了「生成时生成 NuGet 包」选项也会被该规则覆盖。
可行解决方案
方案1:强制关闭测试项目识别(最直接)
- 右键你的类库项目,选择「编辑项目文件」打开
.csproj配置 - 在顶层
<PropertyGroup>节点中添加以下两个配置:
<!-- 强制告知SDK当前不是测试项目 --> <IsTestProject>false</IsTestProject> <!-- 显式指定生成时自动打包,覆盖默认禁用规则 --> <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
- 保存配置后重新生成项目,即可在输出目录看到生成的
.nupkg文件
方案2:调整 xunit 依赖的引用规则
如果你的扩展仅作为编译时依赖使用,不需要把完整 xunit 运行时传递给引用方,可以调整 xunit 包的引用属性:
- 找到项目文件中 xunit 的
PackageReference节点,修改为如下配置:
<PackageReference Include="xunit" Version="你使用的xunit版本号"> <!-- 不把xunit标记为仅当前项目私有资产,允许传递给引用该扩展的项目 --> <PrivateAssets>none</PrivateAssets> <!-- 仅引用xunit的编译时资产,不引入运行时相关内容,避免被识别为测试项目 --> <ExcludeAssets>runtime</ExcludeAssets> </PackageReference>
- 该方案适合纯扩展类库场景,不会影响引用你扩展包的项目正常使用xunit功能
内容的提问来源于stack exchange,提问作者Eugene Aseyev
相关产品推荐
相关产品推荐

