【问题标题】:How to update AspNetCore from 2.2.0 to 2.2.2如何将 AspNetCore 从 2.2.0 更新到 2.2.2
【发布时间】:2020-05-18 23:40:15
【问题描述】:

tldnr:如何将 Microsoft.AspNetCore.App2.2.0 升级到 2.2.2?它在包管理器 UI 中被禁用。


当我创建一个测试项目时,我意识到 Microsoft.AspNetCore.App 是版本 2.2.2(最新版本),而在我的主 Api 项目中它是 2.2.0

由于

,我无法更新它

由 SDK 隐式引用。要更新软件包,请更新 SDK 它所属的

我确实安装了 SDK 2.2.104,should contain 2.2.2(我喜欢 Microsoft 的版本号直截了当)

C:\Users\matthias>dotnet --list-sdks
2.1.202 [C:\Program Files\dotnet\sdk]
2.1.402 [C:\Program Files\dotnet\sdk]
2.1.403 [C:\Program Files\dotnet\sdk]
2.1.503 [C:\Program Files\dotnet\sdk]
2.1.504 [C:\Program Files\dotnet\sdk]
2.1.600-preview-009472 [C:\Program Files\dotnet\sdk]
2.2.104 [C:\Program Files\dotnet\sdk]

将这一切更新为2.2.2 的正确方法是什么?我可以在csproj 中设置包的版本号,它似乎工作得很好,但我想这不是干净的方法。那为什么 UI 会禁用它。

项目文件来自默认模板。

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
  </PropertyGroup>

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

</Project>

来源:https://github.com/matthiaslischka/netcore222updateissue

更新:

我现在像 ESG 建议的那样将 RuntimeFrameworkVersion 2.2.2 添加到 csproj 中,现在我得到了这个奇怪的视图:

我用ILSpy检查了编译的DLL,它似乎仍然是2.2.0.0

【问题讨论】:

  • 检查docs: implicit version,它有很好的记录。基本上:当从PackageReference 中省略Version 属性时,它将始终使用BUILD SYSTEM 上安装的最新版本(假设您没有在 中手动指定特定包的特定版本>网络应用程序 csproj)。背后的想法是在重建时自动应用安全修复(对于独立应用程序或便携式应用程序的前滚)
  • 所以?那为什么不用2.2.2呢?我安装了 SDK 2.2.104 what is 2.2.2。我添加了 csproj xml 和源链接。但无论如何它只是默认模板。
  • 你最终解决了这个问题吗?

标签: asp.net-core .net-core asp.net-core-webapi


【解决方案1】:

我发布此内容是为了回应 Andy 的 GitHub 错误,但在此处重新发布以供进一步了解:

如果您使用的是 .NET Core,您只需在运行应用程序的机器(即您的服务器、开发箱等)上安装最新的补丁运行时来更新补丁。

.NET Core 应用程序自动前滚到与您的目标主要/次要对关联的最高补丁版本。可以使用 a setting in [appname].runtimeconfig.json 禁用此行为,但我们强烈建议您保留它,以确保您始终在最新的运行时运行(包含所有已发布的安全修复程序)。

虽然我们确实建议您运行最新补丁,但我们建议您不要更新您的应用以针对更高的补丁版本,因为您的应用将无法如果目标机器上不存在该补丁,则启动。补丁不应引入您需要更新才能依赖的 API,因此无需更新包参考。

【讨论】:

  • 所以如果我有 SDK 2.2.401 和运行时 2.2.6 那么我应该能够将 AspNetCore.App 从 2.2.0 更新到 ?因为我不能 - 它说被阻止。这是我尝试在新的 Web 应用程序中执行的第一个操作。
  • 它已被阻止,因为您不必更新:)。在运行时,您将在版本 2.2.6 上运行。补丁不会引入新的 API 或功能,因此您的代码无需更改任何内容。您应该针对 2.2.0 版本编写代码并让它在最新的运行时运行。 NuGet 正在阻止更新,因为不需要更新。
【解决方案2】:

由于您拥有 2.2.2 .Net 核心 SDK,因此您可以通过在 csproj 中指定 RuntimeFrameworkVersion 来强制使用 ASP.Net 版本。

<PropertyGroup>
    <RuntimeFrameworkVersion>2.2.2</RuntimeFrameworkVersion>
</PropertyGroup>

【讨论】:

  • 不明白。项目中的目标版本是netcoreapp2.2,那里没有补丁号:&lt;TargetFramework&gt;netcoreapp2.2&lt;/TargetFramework&gt; 这是根据this doc的最高目标版本
  • @Matthias 我的错,那是针对次要版本,而不是针对补丁版本。查看更新。
  • 不改变任何东西。我用默认模板(source)测试过,不行。
  • 我已经分叉了您的项目并应用了更改。查看 repo root 中的屏幕截图:github.com/EricStG/netcore222updateissue
  • 在原帖中查看我的更新。这似乎只是编辑了 nuget 包管理器显示的版本号,而不是真实的版本号。这实际上让我更加困惑......
【解决方案3】:

我在 2.2.8 中遇到了类似的问题,安装 x86 版本的 SDK 解决了这个问题。似乎单元测试是 32 位进程?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    相关资源
    最近更新 更多