为.NET Framework和Core 2.0创建NuGet包的项目配置咨询
单个项目配置多目标框架即可实现(推荐方案)
你完全不需要为不同目标框架创建多个独立项目——用单个项目配置多目标框架是更简洁、易维护的方案,而且你的Visual Studio 15.5.0(对应MSBuild 15.5)已经完全支持这个功能。下面是具体的实现步骤:
1. 修改项目文件配置多目标框架
右键项目 → 选择"编辑.csproj"(如果是老格式的.NET Framework项目,建议先转换成SDK风格项目,VS15.5.0对此支持良好),把原来的<TargetFramework>节点替换成<TargetFrameworks>,用分号分隔你需要支持的框架:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <!-- 替换成你实际需要的.NET Framework版本,比如net452、net46等 --> <TargetFrameworks>net46;netcoreapp2.0</TargetFrameworks> <!-- 配置NuGet包的基础元数据 --> <PackageId>YourUniquePackageId</PackageId> <Version>1.0.0</Version> <Authors>YourName</Authors> <Description>Package supporting both .NET Framework and .NET Core 2.0</Description> </PropertyGroup> </Project>
2. 处理不同框架的差异化代码
如果你的代码需要针对不同框架做特殊实现,可以用条件编译指令区分逻辑:
public void Initialize() { #if NETCOREAPP2_0 // .NET Core 2.0专属初始化逻辑 Console.WriteLine("Running on .NET Core 2.0"); #elif NET46 // .NET Framework专属初始化逻辑 Console.WriteLine("Running on .NET Framework 4.6"); #endif }
3. 配置框架专属依赖
如果某些NuGet包只在特定框架下需要,可以添加条件引用:
<ItemGroup> <!-- 两个框架都需要的公共依赖 --> <PackageReference Include="Newtonsoft.Json" Version="12.0.3" /> <!-- 仅.NET Core 2.0需要的依赖 --> <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.0.0" Condition="'$(TargetFramework)' == 'netcoreapp2.0'" /> <!-- 仅.NET Framework需要的依赖 --> <PackageReference Include="System.Configuration.ConfigurationManager" Version="4.5.0" Condition="'$(TargetFramework)' == 'net46'" /> </ItemGroup>
4. 生成并发布NuGet包
- 切换到Release模式,右键项目 → "打包",生成的
.nupkg文件会存放在bin/Release目录下(编译时MSBuild会自动为每个目标框架生成对应程序集并打包到同一个NuGet包中); - 用NuGet命令行发布到私有仓库:
nuget push YourUniquePackageId.1.0.0.nupkg -Source https://your-private-repo-url/v3/index.json -ApiKey your-private-repo-api-key
额外注意事项
- 确保你选择的.NET Framework版本和目标项目的版本匹配(比如如果用户的项目用net45,就把配置里的net46改成net45);
- 测试时分别在.NET Framework和.NET Core 2.0项目中安装包,验证功能是否正常;
- 老的非SDK风格项目也可以配置多目标,但步骤更繁琐,建议优先转成SDK风格。
内容的提问来源于stack exchange,提问作者Dimitry
相关产品推荐
相关产品推荐

