为什么 Msbuild NoTargets csproj 需要 TargetFramework?

Why does Msbuild NoTargets csproj requires TargetFramework?

我想将一些工具打包为 nuget,我正在使用 Microsoft.Build.NoTargets 项目 SDK 格式来实现相同的目的。

如文档中所述,当项目文件不编译任何程序集时使用 NoTargets。但是需要设置TargetFramework属性

如果我不指定一些 TargetFramework 属性.

,msbuild 将失败并出现 NETSDK1013

为什么 msbuild 要求为 NoTargets SDK csproj 指定 TargetFramework

目前这是在 VS 中加载所必需的:VS 检查项目是否包含 xml 中的 TargetFrameworkTargetFrameworks 以加载 sdk-based 中的项目“新”项目系统(支持 IDE 项目集成的东西)。否则它会使用无法理解 SDK 使用的功能的遗留系统,并且不会加载或给您带来糟糕的体验。

可以通过默认 属性 在 SDK 中修复 MSBuild 错误,但这仍然会导致 IDE 集成失败。

另请注意,该 SDK 导入了其他适用于 .NET 项目的 SDK(language-independent 在 F#/C#/VB 上),因此您应该获得 NuGet 恢复或打包等功能,无需当设置 TargetFramework 时会有很大的摩擦(即使它可以默认为 SDK 在 NoTargets 本身中所基于的任何内容,如前所述)