如何为WPF库创建同时兼容.NET 9与.NET Framework 4.8.1的NuGet包?
实现多目标框架WPF库的NuGet打包方案
完全可以不用复杂操作实现你的需求,具体步骤如下:
1. 配置单个项目的多目标编译
在你的WPF库项目的.csproj文件中添加以下配置,同时指定两个目标框架并启用可空类型:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFrameworks>net481;net9.0-windows</TargetFrameworks> <Nullable>enable</Nullable> <UseWPF>true</UseWPF> <!-- 必须添加,确保WPF相关类能被正确编译 --> <GeneratePackageOnBuild>true</GeneratePackageOnBuild> <!-- 构建时自动生成NuGet包 --> </PropertyGroup> </Project>
这个配置会让项目同时编译两个框架版本,且WPF依赖会被正确识别。
2. 用同一套测试覆盖两个目标框架
创建一个测试项目(推荐xUnit或NUnit),同样配置多目标框架,引用你的WPF库即可:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFrameworks>net481;net9.0-windows</TargetFrameworks> <Nullable>enable</Nullable> <UseWPF>true</UseWPF> <!-- 如果测试涉及WPF控件交互,需要添加 --> </PropertyGroup> <ItemGroup> <PackageReference Include="xunit" Version="2.6.6" /> <PackageReference Include="xunit.runner.visualstudio" Version="2.5.3"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> <!-- 引用你的WPF库项目 --> <ProjectReference Include="..\YourWpfLibrary\YourWpfLibrary.csproj" /> </ItemGroup> </Project>
- 在Visual Studio的测试资源管理器中,会自动列出两个目标框架的测试集合,你可以一键运行所有测试,也可以单独选择某一框架的测试执行。
- 用命令行的话,执行
dotnet test会自动遍历所有目标框架并完成测试。
3. 打包成单个NuGet包
项目配置中的<GeneratePackageOnBuild>true</GeneratePackageOnBuild>会在每次构建时自动生成包含两个目标框架的NuGet包。你也可以手动执行dotnet pack命令生成包。生成的.nupkg文件会包含两个框架的编译输出,引用该包的项目会自动根据自身目标框架匹配对应的版本。
如果需要自定义NuGet包的元数据,还可以在项目的<PropertyGroup>中添加相关配置:
<PropertyGroup> <!-- 其他已有配置 --> <PackageId>YourCompany.YourWpfLibrary</PackageId> <Version>1.0.0</Version> <Authors>你的名字</Authors> <Description>支持.NET Framework 4.8.1和.NET 9的WPF组件库</Description> </PropertyGroup>
内容的提问来源于stack exchange,提问作者AxD
相关产品推荐
相关产品推荐

