非SDK风格项目如何为NuGet包添加TargetFramework信息?
问题背景
这是另一问题的后续。我有一个迁移后的.NET Framework项目,尝试使用msbuild -t:pack及对应的NuGet.Build.Tasks.Pack进行打包。我已在*.csproj文件中添加了所有NuGet信息,如下所示:
<TargetFramework>net48</TargetFramework> <!-- 报错! --> <PackageId>Testcenter.RobotFramework</PackageId> <Version>1.0.0</Version> <Authors>Testcenter Team, Some person</Authors> <Company>Some company</Company> <PackageOutputPath>$(ProjectDir)</PackageOutputPath> <Description>A class library to implement a remote library interface conforming to RobotFramework.</Description> <Title>RobotFramework Remote-Library-Interface for C#</Title> <Copyright>Copyright (c) Some company 2022</Copyright> <RepositoryUrl>https://redacted-url.com/repos/testcenter.robotframework/browse</RepositoryUrl> <Product>Testcenter.RobotFramework</Product> <AssemblyVersion>1.0.0</AssemblyVersion> <FileVersion>1.0.0</FileVersion>
由于报错,我无法使用SDK风格项目中常用的TargetFramework属性。我该添加什么属性或配置,才能让NuGet识别我以net48为目标框架,并在打包后的项目中显示该信息? 我在目标框架文档中未找到相关信息,因为该文档仅针对SDK风格项目,且显然我无法在当前项目中使用其属性。同时,我也未找到针对非SDK项目的类似文档。
解决方案
对于这类无法使用SDK风格TargetFramework属性的.NET Framework项目,可通过以下两种方式配置,让NuGet正确识别net48目标框架:
1. 替换为旧项目格式的目标框架属性
删掉报错的<TargetFramework>net48</TargetFramework>,改用旧项目的原生目标框架配置:
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
NuGet.Build.Tasks.Pack会自动读取该属性,打包后包的目标框架会被识别为net48。
2. 手动指定NuGet包的目标框架
如果第一种方式不生效,可直接添加PackageTargetFramework属性明确指定:
<PackageTargetFramework>net48</PackageTargetFramework>
该属性会直接告知NuGet打包任务当前包的目标框架,确保打包后显示正确的框架信息。
此外,建议保持NuGet.Build.Tasks.Pack为最新版本,避免版本兼容问题。
内容的提问来源于stack exchange,提问作者HackXIt
相关产品推荐
相关产品推荐

