【问题标题】:MSBuild fails when updating solution to .NET 4.7.2将解决方案更新到 .NET 4.7.2 时,MSBuild 失败
【发布时间】:2019-07-06 03:38:29
【问题描述】:

我正在更新使用 .NET 4.7.2 的解决方案并遇到问题。

我可以在开发机器上构建和运行项目,但 TeamCity 不行。

在 TeamCity 构建步骤中,我将 /p:TargetFrameworkVersion:v4.7.2 添加到 MSBuild 步骤。

其中一个项目以 netstandard 2.0 为目标,MSBuild 给了我一个错误,我应该在那里添加 .NET Framework 4.7.2。我添加了 .NET Framework 4.7.2 作为目标,但这没有任何效果。 这是构建日志中的错误:

[NETSdkError] C:\Program Files\dotnet\sdk\2.1.402\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.TargetFrameworkInference.targets(150, 5): error NETSDK1045: The current .NET SDK 不支持面向 .NET Standard 4.7.2。以 .NET Standard 2.0 或更低版本为目标,或者使用支持 .NET Standard 4.7.2 的 .NET SDK 版本。

这很奇怪,因为没有 .NET Standard 4.7.2,但我认为这只是错误消息中的错字。

MSBuild 工具 2017 和 .NET 4.7.2 目标包安装在代理上。

知道这里有什么问题吗?可能是额外的 MSBuild 参数是问题吗? 失败项目的项目文件如下所示:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>net472;netstandard2.0</TargetFrameworks>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
    <PackageReference Include="Autofac" Version="4.6.1" />
    <PackageReference Include="System.Configuration.ConfigurationManager" Version="4.4.1" />
    <PackageReference Include="System.Net.Http" Version="4.3.3" />
  </ItemGroup>
  <ItemGroup>
    <Reference Include="SomeLibrary">
      <HintPath>..\packages\SomeLibrary.1.0.4\lib\net461\SomeLibrary.dll</HintPath>
    </Reference>
    <ProjectReference Include="..\ProjectName.Core\ProjectName.Core.csproj" />
    <ProjectReference Include="..\ProjectName.Domain\ProjectName.Domain.csproj" />
    <ProjectReference Include="..\ProjectName.Web\ProjectName.Web.csproj" />
  </ItemGroup>
</Project>

当我尝试使用相同的参数在本地运行 MSBuild 时 - 它失败但出现完全不同的错误,这与非法语法和 C#7 语言功能有关。通过 Rider 构建解决方案效果很好。

【问题讨论】:

  • 可能下载并安装某种 SDK from here(可能需要重新启动)会有所帮助。
  • @UweKeim 请看我的编辑
  • @UweKeim .NET Core SDK 2.1.402 已经到位,所以我认为不是问题
  • @CamiloTerevinto 刚刚做了
  • 我会复制 bin 文件夹然后删除。这将迫使整个项目重建。当 net 的版本发生变化时,编译器依赖项总是会进行完全重建。

标签: c# .net msbuild .net-4.7.2


【解决方案1】:

如果您使用多目标项目,请改用/p:TargetFramework=net472

TargetFrameworkVersion 只会更改所使用框架的版本,而不是 TargetFramework 值或构建中其他地方使用的 TargetFrameworkMoniker。因此,没有版本为 4.7.2 的 .NET Standard 目标框架会导致您的构建问题。

请注意,设置这样的全局属性可能仅在构建中的所有项目都支持时才有效,因此在包含可能支持也可能不支持的多个项目的解决方案中使用它时要小心。

【讨论】:

  • 我有这个问题一整天,这为我解决了。谢谢
【解决方案2】:

我在代理机器上只安装了框架 4.7.2 时遇到了同样的错误。 你需要安装开发者sdk包(NDP472-DevPack.exe) - NDP472-DevPack.exe 的链接: https://dotnet.microsoft.com/download/dotnet-framework/thank-you/net472-developer-pack-offline-installer

【讨论】:

    猜你喜欢
    • 2020-06-22
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    相关资源
    最近更新 更多