【问题标题】:Is it possible to set the TargetFramework on the commandline with dotnet build / restore?是否可以使用 dotnet build/restore 在命令行上设置 TargetFramework?
【发布时间】:2021-12-04 07:35:45
【问题描述】:

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

dotnet build -f net5

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

dotnet restore

抱怨缺少框架:

dotnet 恢复 common\common.csproj 确定要恢复的项目... C:\Program Files\dotnet\sdk\5.0.400\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.TargetFrameworkInference.targets(92,5): error NETSDK1013: The TargetFramework value '' is not已识别。 可能拼写错误。如果不是,则必须明确指定 TargetFrameworkIdentifier 和/或 TargetFrameworkVersion 属性。

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

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

感谢您的帮助

【问题讨论】:

  • 试试dotnet restore -p:TargetFramework=net5.0
  • 我会说这行得通! -p 开关似乎没有记录(docs.microsoft.com/en-us/dotnet/core/tools/dotnet-restore)。你怎么知道的?
  • 它记录在msbuild docsdotnet restore 实际上是 dotnet msbuild -t:restore,因此 msbuild 的任何开关都适用于 restorebuild
  • 完美,你想把你的评论写成答案吗?

标签: .net msbuild


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多