从Visual Studio 2019将ASP.NET Core 3.1网站发布到Azure时出错


9

我有一个预先存在的ASP.NET Core 3.0应用程序,该应用程序已成功部署到Azure应用程序服务(使用该AspNetCoreModuleV2模块)。将应用程序升级到ASP.NET Core 3.1(今天的发行版)后,该应用程序将在我的本地IIS Express版本上构建并正确运行。但是,当我尝试使用Visual Studio 16.4(今天的版本)发布到Azure App Service 时,出现以下错误:

资产文件“ C:\ Project \ obj \ project.assets.json”没有针对“ .NETCoreApp,Version = v3.0”的目标。确保还原已运行,并且已在项目的TargetFrameworks中包含“ netcoreapp3.0”。

笔记

  • 所有<PackageReference>的到Microsoft.AspNetCoreMicrosoft.EntityFrameworkCoreMicrosoft.Extensions已被更新到3.1.0
  • 我已经清理了解决方案,甚至删除了我的obj文件夹,以确保没有任何挥之不去的引用。
  • 正在从的3.1.100版本生成此错误Microsoft.PackageDependencyResolution.targets

我得到的东西仍然挂到.NET 3.0核心的依赖。但是目前尚不清楚为什么这只会在部署期间引起问题。是Azure的应用程序Service的还没有准备好.NET 3.1的核心?还是依赖解决方案目标有问题?


谢谢@Panagiotis Kanavos用标记此内容asp.net-core-3.1。我缺乏创建新标签的必要声誉。
杰里米·卡尼

显然,下一步是从全新的ASP.NET Core 3.1项目模板开始,尝试部署到全新的Azure App服务,然后重新引入依赖项,直到能够重现该问题。直到本周晚些时候,我才有时间这样做。在那之前,我一直希望其他人可以对这种类型的错误有所了解,或者自己找到解决方案。
杰里米·卡尼

该文档显示了如何显式选择.NET Core SDK版本。你尝试过吗?3.1 SDK是否出现在列表中?
Panagiotis Kanavos

@PanagiotisKanavos:该项目尚未使用Azure Pipelines发布。就是说,这确实提醒我,Visual Studio依赖的配置文件中还有一个<TargetFramework>设置,我在此进行了设置。糟糕!将其更改为与目标匹配可以解决当前的问题。(这引入了一个新问题,即Azure App Service本身跳向目标,但可以通过使用独立的部署来解决此问题,类似于您提供的链接。)感谢您为我指明了正确的方向!pubxmlnetcoreapp3.1csproj
杰里米·卡尼

1
非常感谢您找到这个问题(和答案)。我开始对采用最新的MS变更感到沮丧(仅在他们的建议和鼓励下),以便不断遇到这样的问题。
弗兰克,

Answers:


13

最初的问题已确定,眼前的问题与<TargetFramework>设置两个地方有关:

  1. 项目文件(如csproj
  2. 发布配置文件(即pubxml

<TargetFramework>必须更新这两个位置,他们必须匹配准确。否则,出版将无法找到其目标project.assets.json文件,这是基于内置<TargetFramework>的的csjproj文件。

注意:您很可能希望pubxml文件遵循文件中的<TargetFramework>设置csproj,但事实并非如此。

文本编辑器

要通过文本编辑器进行修改,

  1. 打开~/Properties/PublishProfiles文件夹。
  2. 打开*.pubxml您要编辑的。
  3. 将的值修改<TargetFramework>netcoreapp3.1
<TargetFramework>netcoreapp3.1</TargetFramework>

Visual Studio 2019

要通过Visual Studio 2019 IDE 进行此修改,

  1. 单击Web一键式发布工具栏上的齿轮图标(位于发布图标的右侧)。
  2. 假设目标框架设置netcoreapp3.1,单击编辑图标旁边。
  3. 确保将目标框架设置为netcoreapp3.1
  4. 点击保存

警告:使用IDE时,您可能会在这里遇到问题。在编辑配置文件时,您很可能会从已经选择的项目文件中看到netcoreapp3.1。但是,当您点击保存时,它将恢复为原始值(例如,netcoreapp3.0在我的情况下)。这是因为您实际上没有更改接口中的值,Visual Studio误认为没有更改基础值。如果您临时切换另一个值(例如 Configuration),则Visual Studio将识别出已发生更改,并且两个值都将在*.pubxml文件中更新。

再次感谢@PanagiotisKanavos向我指出正确的方向(请参阅原始主题的评论)。


感谢您发布解决方案!当我昨晚尝试发布时,我为此感到挣扎,但这没有任何意义。在发布向导中,始终选择3.1作为目标,因此我认为还可以,但是一旦pubx按照您的说明打开文件,该文件仍然位于3.0上。非常沮丧。老实说,自从VS 16.3和.NET Core 3.0发布以来,我什么都没有,但很奇怪,晦涩难懂,并且完全显示出停止出现的错误和问题。再次感谢!
Gup3rSuR4c

如果您也有这个想法,那就很容易了,但是当您告诉它以依赖于框架的方式发布时,它决定与它一起发布整个框架,这真是太可爱了。发布应该在1分钟左右,现在是15分钟以上...
Gup3rSuR4c

仅供参考:自从我最初发布此内容以来,Microsoft已更新Azure应用服务以提供对.NET Core 3.1的本机支持。鉴于此,我HTTP Error 500.30 - ANCM In-Process Start Failure从原始消息中删除了有关该消息的警告。以前,这需要发布应用程序的完全独立的发行版。(也就是说,新版本的.NET Core删除之间通常存在2-3天的延迟时间,并且将其集成到Azure App Service环境中,因此在以后的更新中意识到这一点很有用。)
Jeremy Caney

1
很好,我只更新了项目属性中的框架版本,甚至没有想到.pubxml文件。这导致我的发布挂起,将.pubxml更新为“ netcoreapp3.1”后,它可以正常工作。谢谢
demoncodemonkey

2

打开项目文件夹;

  • 导航到文件夹属性>> PublishProfiles
  • 打开文件FolderProfile.pubxml,然后将版本3.0更改为3.1

    netcoreapp3.1

  • 最后,在发布之前重建应用程序


最好提供明确的指令来pubxml手动修改文件,特别是考虑到通过Visual Studio 2019 GUI 修改这些值很愚蠢。我已将这些详细信息合并到我的原始答案中,因此明确说明了此选项。谢谢!
杰里米·卡尼

0

更改

<PackageReferenceInclude="Microsoft.AspNetCore"Version="2.2.0" />
 to 
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />

为我工作。


1
对于ASP.NET Core 3.1Microsoft.AspNetCore3.1.0按照Microsoft v3.1发行说明将所有库更新为。您的方法可能是对ASP.NET Core 2.2中类似问题的有效解决方案,假设错误并非由您csprojpubx文件之间的不匹配引起,就我而言。
杰里米·卡尼

上述两个软件包的版本当前为2.2.0,并标记为最新版本。
自由

1
@Libertad,您需要将Visual Studio安装升级到版本16.4.0,以查看最新的点网核心3.1版本
navule

@navule我的VS是最新的。上面的包只是nuget包。看一下这个:nuget.org/packages/Microsoft.AspNetCore 并查看其最新版本
Libertad
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.