【问题标题】:Attempting to migrate the .net core projects from 2.2 to 3.1尝试将 .net 核心项目从 2.2 迁移到 3.1
【发布时间】:2020-05-06 09:35:15
【问题描述】:

尝试将项目从 .net core 2.2 迁移到 3.1。在本地调试中,整个应用程序正常工作。我试图在 IIS 上发布我的应用程序。发布后,我转到站点 url 并查看错误:

错误 500.31 - ANCM 无法在 IIS 中查找本机依赖项

此问题的常见解决方案: 未找到指定版本的 Microsoft.NetCore.App 或 Microsoft.AspNetCore.App。

ANCM 检测到的具体错误: 遇到致命错误。在

中找不到执行应用程序所需的库“hostpolicy.dll”

dotnet --info 命令结果:

所有项目都有目标框架.netcoreapp 3.1,库是.netstandart 2.0。 我已经尝试重新安装 SDK,Visual Studio 2019。我已经将与 Microsoft 连接的每个 nuget 包从 2.2 更新到 3.1.1。

还安装了托管包 3.1.1。任何想法如何解决这个问题?

UPD。发布命令:

dotnet publish $projectPath -m --no-build -c:$publishConfiguration -o $destinationPath -v q -r $targetPlatform /p:EnvironmentName=$publishEnvironment --self-contained false;

目标平台 = win-x64。主机型号为InProgress

UPD 2.dotnet list package 解决方案的结果:https://gist.github.com/AndreiKhotko/60aafeb42566ac3e3fadfab2d0209dde

UPD 3.ASP.NET Core Diagnostics 生成的报告:https://gist.github.com/AndreiKhotko/2a193b4121c4399e0a00bfef708140da

UPD 4. 抱歉,我没有指定完整的错误消息。这是它的最后一部分(第一部分见上文):

无法作为独立应用运行。如果这应该是一个 依赖框架的应用,在 '*.runtime.config' 中指定适当的框架。

*.runtime.config的内容:

{
  "runtimeOptions": {
    "tfm": "netcoreapp3.1",
    "includedFrameworks": [
      {
        "name": "Microsoft.NETCore.App",
        "version": "3.1.1"
      },
      {
        "name": "Microsoft.AspNetCore.App",
        "version": "3.1.1"
      }
    ],
    "configProperties": {
      "System.GC.Server": true
    }
  }
}

【问题讨论】:

  • 您能在解决方案目录中创建dotnet list package 并创建结果要点吗?
  • @MartinFrøhlich 当然。我会在更新问题后通知您
  • @MartinFrøhlich 看看。现在我看到有版本为16.0 的包.net Tests。似乎这些参考文献破坏了出版。我稍后会检查它
  • @JalpaPanchal 将模块更改为 AspNetCoreModule 不是一个好主意。事件查看器显示相同的错误。他们的描述毫无用处
  • 请从发布命令中删除--self-contained false。为什么要在选择 win-x64 时禁用它?这只会使生成的二进制文件不一致。

标签: c# asp.net-core iis .net-core


【解决方案1】:

原因是dotnet publish 在服务组合开关时具有非常模糊的行为。

在您的情况下,--self-contained false-r linux-x64 有点相互冲突。 -r linux-x64 强制生成独立的二进制文件,而--self-contained false 似乎从最终文件中删除了重要的运行时依赖项。 dotnet CLI 没有为此给出警告/错误,这太糟糕了。

如果您的目标是使用依赖于框架的部署,请严格按照说明进行操作,https://docs.microsoft.com/en-us/dotnet/core/deploying/deploy-with-cli#framework-dependent-deployment 并从您的命令中删除 -r linux-x64

【讨论】:

  • 我认为您应该添加指向dotnet publish 命令的链接,尤其是对于-r 选项。正如那篇文章中所说,-r|--runtime <RUNTIME_IDENTIFIER> 为给定的运行时发布应用程序。 这用于创建独立部署 (SCD)。有关运行时标识符 (RID) 的列表,请参阅 RID 目录。默认是发布依赖于框架的部署 (FDD)。
  • 我的目标是实现 FDE(框架相关可执行文件)。我真的需要 -r 标识符。但是原生依赖冲突破坏了应用程序
猜你喜欢
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
  • 2021-09-02
  • 1970-01-01
  • 2020-08-22
  • 2021-04-13
  • 2022-01-16
相关资源
最近更新 更多