You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在树莓派上托管自包含ASP.NET Core应用遇类型加载异常

树莓派部署自包含ASP.NET Core Razor Pages应用出现TypeLoadException的解决方法

问题描述

在树莓派上托管自包含ASP.NET Core Web应用时,运行应用出现以下错误:

Unhandled exception. System.TypeLoadException: Could not load type 'Microsoft.AspNetCore.Mvc.ApplicationParts.ConsolidatedAssemblyApplicationPartFactory' from assembly 'Microsoft.AspNetCore.Mvc.Razor, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.
   at System.Reflection.RuntimeAssembly.GetTypeCore(String, ReadOnlySpan`1, Boolean, Boolean)
   at System.Reflection.TypeNameParser.GetType(String, ReadOnlySpan`1, String)
   at System.Reflection.TypeNameParser.NamespaceTypeName.ResolveType(TypeNameParser&, String)
   at System.Reflection.TypeNameParser.Parse()
   at System.Reflection.TypeNameParser.GetType(String, Func`2, Func`4, Assembly, Boolean , Boolean , Boolean )
   at System.Reflection.TypeNameParser.GetType(String, Assembly, Boolean , Boolean )
   at System.Type.GetType(String, Boolean)
   at Microsoft.AspNetCore.Mvc.ApplicationParts.ProvideApplicationPartFactoryAttribute.GetFactoryType()
   at Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartFactory.GetApplicationPartFactory(Assembly)
   at Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager.PopulateDefaultParts(String)
   at Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.GetApplicationPartManager(IServiceCollection, IWebHostEnvironment)
   at Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.AddMvcCore(IServiceCollection)
   at Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddRazorPagesCore(IServiceCollection)
   at Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddRazorPages(IServiceCollection)
   at Program.<Main>$(String[]) in C:\Users\mihas\source\repos\HelloWorld\Program.cs:line 4
Aborted

应用代码第4行为:

// Add services to the container. 
builder.Services.AddRazorPages();

采用自包含部署仍出现错误,尝试依赖框架部署并安装最新框架后问题依旧。

解决步骤

  • 确认发布目标架构匹配树莓派
    树莓派多为ARM架构(Pi 3及以下为ARM32,Pi 4及以上支持ARM64),发布时必须指定正确的Runtime Identifier(RID):

    • 针对ARM64树莓派:
      dotnet publish -c Release -r linux-arm64 --self-contained true
      
    • 针对ARM32树莓派:
      dotnet publish -c Release -r linux-arm --self-contained true
      

    错误的RID会导致依赖库与架构不兼容,引发类型加载失败。

  • 清理缓存并重新发布
    删除项目根目录下的bin和obj目录,重新执行发布命令,避免旧缓存导致的依赖不一致问题。

  • 统一ASP.NET Core包版本
    检查项目.csproj文件,确保所有Microsoft.AspNetCore.*相关包的版本完全一致(例如均为8.0.x),混合版本会导致类型定义不匹配。

  • 验证依赖框架部署的运行时版本
    若使用依赖框架部署,在树莓派执行以下命令确认安装的运行时版本与项目目标框架一致:

    dotnet --list-runtimes
    

    确保存在与项目TargetFramework(如net8.0)完全匹配的ASP.NET Core Runtime版本。

  • 确保发布输出完整复制
    自包含发布后,将整个publish目录完整复制到树莓派,不要仅复制单个可执行文件,保证所有依赖DLL都被正确部署。

内容的提问来源于stack exchange,提问作者msmiha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 17:55:20