是否可以使用 dotnet build/restore 在命令行上设置 TargetFramework?

cit*_*kid 7 .net msbuild nuget

我想从项目文件中删除 TargetFramework 说明符并通过命令行传递它。听起来很容易:

dotnet build -f net5
Run Code Online (Sandbox Code Playgroud)

但最大的问题是 NuGet 方面。因为

dotnet restore
Run Code Online (Sandbox Code Playgroud)

抱怨缺少框架:

dotnet 恢复 common\common.csproj 确定要恢复的项目... C:\Program Files\dotnet\sdk\5.0.400\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.TargetFrameworkInference.targets(92,5) :错误 NETSDK1013:无法识别 TargetFramework 值“”。它可能拼写错误。如果不是,则必须显式指定 TargetFrameworkIdentifier 和/或 TargetFrameworkVersion 属性。

问题是dotnet restore不接受 TargetFamework 参数。因此,我被迫将 TargetFramework 写入配置文件:更糟糕的是,目录中始终存在单个 NuGet 恢复obj,因此每次在目标框架之间切换时,我都需要修改配置文件并进行全新恢复。这是非常麻烦的,我想知道如何避免这种情况。

如果这个问题无法解决,我会踢出 NuGet 并直接引用包程序集。

JL0*_*0PD 12

由于dotnet restoredotnet build是 的包装器dotnet msbuild,因此您可以使用所有 MSBuild 开关来更改构建系统的行为。

这里我们需要设置目标框架,可以通过

  • 在项目文件中设置属性:<TargetFramework>net5.0</TargetFramework>

或者

  • 通过命令行文档设置属性:dotnet restore -p:TargetFramework=net5.0

或者

  • 设置环境变量