如何解决 .net 核心构建错误 NETDSDK1061 和警告 MSB3277

Posted

技术标签:

【中文标题】如何解决 .net 核心构建错误 NETDSDK1061 和警告 MSB3277【英文标题】:How to resolve .net core build error NETDSDK1061 and warning MSB3277 【发布时间】:2019-03-02 06:01:49 【问题描述】:

我遇到了问题,我的 AspNetCore.App-metapackage 引用的 EntityFrameworkCore (2.1.2) 版本低于 EfCore 提供程序包(NpgSql,引用 2.1.3)。结果是警告 MSB3277 (here is the question)。对此的快速修复是公认的答案。

另一个答案指出,我使用的 Microsoft.AspNetCore.App 包(当时为 2.1.1)比上一个稳定版本(2.1.4)低。无法更改包版本(见下图)。

我在类库项目中遇到了与 Microsoft.NETCore.App 相同的问题

我什至没有注意到我使用了比可用的更旧的元包。直到今天,我一直在检查 NuGet 包管理器中是否有可用的更新。我使用默认的项目模板并始终安装最新的 .NetCore SDK,我相信这已经足够了。不是。

调查此问题后,我发现,我可以强制我的项目通过包管理器控制台(Install-Package Microsoft.NETCore.App -Version 2.1.4Install-Package Microsoft.AspNetCore.App -Version 2.1.4)使用特定的 .NETCore.App 或 AspNetCore.App 元包。

在该命令之后,我遇到了构建错误 (NETSDK1061: The project was restored using Microsoft.NETCore.App version 2.1.4, but with current settings, version 2.1.0 would be used instead. To resolve this issue, make sure the same settings are used for restore and for subsequent operations such as build or publish.)。

【问题讨论】:

【参考方案1】:

我试图在该问题上找到任何帮助,发现一些 GitHub 问题(例如this one)看起来非常相似,但实际上是不同的。 我找到了descriptive doc,但这并没有真正帮助我。

我从 Rick Strahl 那里找到了一个 pretty helpful blog post,解释了可用的软件包以及每个软件包的用途。这是一个很好的开始。

这是我的解决方案:

第 1 步: 在包管理器控制台中执行Install-Package Microsoft.AspNetCore.App -Version [VersionOfYourChoice] 和/或执行Install-Package Microsoft.NETCore.App -Version [VersionOfYourChoice]

第 2 步: 编辑.csproj,如下图:

<PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <RuntimeFrameworkVersion>2.1.4</RuntimeFrameworkVersion>  <- add this line
    <!--<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch> --> <- alternative
</PropertyGroup>

另一个要点:如果您使用 Win10,请帮自己一个忙并检查已安装的 .NET Core SDK/运行时等。卸载您不需要的每个 SDK/运行时(再次:检查 Rick 的博客文章)。 您只需要您当前在您的一个项目中定位的那些。

例如:如果您正在开发一个 .NET Core 项目,并且您刚刚使用版本 2.1.4 完成了这两个步骤 - 在撰写本文时,您只需要 Microsoft .NET Core SDK 2.1.402。为了稍微清理一下,我卸载了每个 .NET Core SDK/Runtimes/Packages,并从here 获取了最新的。

注意:我关注this blog post from Jeff Atwood 回答了一个问题,我花了很长时间才解决。我希望这会有所帮助。

编辑.NET Core 2.2 的好消息:您只需按如下方式编辑 .csproj:

<PropertyGroup>
  <TargetFramework>netcoreapp2.2</TargetFramework>
  <RuntimeFrameworkVersion>2.2.0</RuntimeFrameworkVersion>
</PropertyGroup>

编辑: 元包不应再手动更新。 This is the recommendation for updating AspNetCore。元包的版本取决于安装的 SDK。

【讨论】:

【参考方案2】:

将此行添加到 .csproj 文件后,我仍然看到此问题。

<RuntimeFrameworkVersion>2.1.5</RuntimeFrameworkVersion>

将 Version 属性添加到 Microsoft.AspNetCore.App 包引用为我解决了这个问题。我改变了这个:

<PackageReference Include="Microsoft.AspNetCore.App" />

到这里:

<PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.5" />

Joshit's answer 中的第 1 步可能会自动执行此操作,但我已经拥有最新版本的 Microsoft.AspNetCore.App。

【讨论】:

这对我来说也是如此.. 太感谢了【参考方案3】:

呃。这个问题对我来说非常棘手。我执行了Joshit's answer 中的步骤,但错误仍然存​​在。然后我做了:

构建 > 清洁解决方案 构建 > 构建解决方案

现在它正在工作。

了解您的 SDK 版本会有所帮助,可在此处找到:C:\Program Files\dotnet\sdk

您也可以在发布时遇到此问题。将这些行添加到 publish_profile.pubxml 文件会很有帮助:

<TargetFramework>netcoreapp2.1</TargetFramework>
<RuntimeFrameworkVersion>2.1.0</RuntimeFrameworkVersion>

将 2.1.0 替换为 2.1.4 或您正在使用的任何版本。

【讨论】:

以上是关于如何解决 .net 核心构建错误 NETDSDK1061 和警告 MSB3277的主要内容,如果未能解决你的问题,请参考以下文章

如何从 .net 核心使用 .net 框架?

如何配置 .net 核心 API 以在 IIS 中工作?

Visual Studio 2017不构建项目

如何解决 Jenkins 构建失败错误:MSB4041

如何使用 powershell 构建、发布 ASP.NET 核心项目来构建服务器?

调用.Net API时如何解决邮递员中的401未授权错误