发布ASP.NET Core 2.1到Azure时遇"AspNetCore"不存在错误
解决ASP.NET Core 2.1发布Azure时非Portable运行时缺失程序集的问题
我之前也碰到过一模一样的情况!你这问题的核心其实是:当选择特定目标运行时(非Portable)进行框架依赖部署时,发布过程的程序集引用逻辑出现异常,导致Azure环境找不到对应文件——但本地构建没问题,是因为本地运行时的依赖加载机制和Azure上的发布包处理逻辑有差异。
下面是我亲测有效的解决步骤:
1. 检查项目文件(.csproj)的运行时配置
打开你的项目文件,确认以下几点:
- 确保
<RuntimeIdentifiers>节点包含了你选择的目标运行时(比如win-x64),示例配置:<PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> <RuntimeIdentifiers>win-x64;portable</RuntimeIdentifiers> </PropertyGroup> - 检查是否存在
<PublishWithAspNetCoreTargetManifest>配置,如果有且值为false,改成true——这个配置会确保发布时包含ASP.NET Core的必要清单文件,避免依赖遗漏。
2. 彻底清理缓存后重新生成发布包
本地编译缓存有时候会干扰发布包的正确性:
- 在Visual Studio中右键项目,依次选择清理 -> 生成;
- 手动删除项目目录下的
bin和obj文件夹,再重新生成项目、创建发布包。
3. 对齐Azure App Service的运行时设置
登录Azure门户,找到你的App Service:
- 进入配置 -> 常规设置,确认
.NET Core版本设置为2.1; - 确保平台位数和你选择的目标运行时匹配(比如选了
win-x64就设为64位),位数不匹配会直接导致程序集找不到。
4. 修正发布配置文件(.pubxml)的细节
打开你的发布配置文件,检查核心配置:
- 确保
<RuntimeIdentifier>和你选择的目标运行时完全一致,且<SelfContained>设为false(因为是框架依赖部署),示例:<PropertyGroup> <RuntimeIdentifier>win-x64</RuntimeIdentifier> <SelfContained>false</SelfContained> </PropertyGroup> - 清理掉配置中可能存在的冲突项(比如重复的运行时指定、错误的部署模式设置)。
我当时就是项目文件里的RuntimeIdentifiers没包含我选的win-x64,加上Azure平台不小心设成了32位,改完这两处就完全正常了!
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

