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

Is it possible to set the TargetFramework on the commandline with dotnet build / restore?

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

dotnet build -f net5

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

dotnet restore

抱怨缺少框架:

dotnet restore common\common.csproj Determining projects to restore... C:\Program Files\dotnet\sdk.0.400\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.TargetFrameworkInference.targets(92,5): error NETSDK1013: The TargetFramework value '' was not recognized. It may be misspelled. If not, then the TargetFrameworkIdentifier and/or TargetFrameworkVersion properties must be specified explicitly.

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

如果这不能解决,我会踢出 NuGet 并直接引用包程序集。

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

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

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

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

  • 设置环境变量不推荐(由我)