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

ASP.NET Core 2.2独立运行exe时MVC视图未找到问题问询

问题根因

该问题由MVC应用部件(ApplicationPart)注册不全导致:

  • 独立类库中初始化MVC时,仅手动注册了应用主程序集,没有将自动生成的Razor预编译视图程序集(*.Views.dll)注册为应用部件。
  • 用Visual Studio或dotnet run启动时,运行环境会自动读取项目生成的.deps.json依赖配置,把同目录下所有关联程序集(包括视图程序集)自动加载到MVC部件列表中,因此视图可以正常找到。
  • 直接运行编译生成的.exe文件时(目标为.NET Framework 4.8),运行时不会主动解析.deps.json的依赖条目,也不会自动扫描同目录下的视图程序集,MVC视图引擎找不到预编译的视图资源,就会抛出视图未找到的错误。
修复方案

按以下步骤调整配置即可解决:

  • 修改类库中的MVC初始化逻辑,显式加载所有预编译视图程序集作为应用部件,参考代码如下:
    // 原有MVC注册逻辑
    var mvcBuilder = services.AddMvc();
    // 首先注册入口程序集
    mvcBuilder.AddApplicationPart(Assembly.GetEntryAssembly());
    // 显式扫描运行目录下所有预编译视图程序集并注册
    var runtimeDir = AppContext.BaseDirectory;
    foreach (var viewDllPath in Directory.GetFiles(runtimeDir, "*.Views.dll", SearchOption.TopDirectoryOnly))
    {
        try
        {
            var viewAssembly = Assembly.LoadFrom(viewDllPath);
            mvcBuilder.AddApplicationPart(viewAssembly);
        }
        catch
        {
            // 跳过加载失败的无效程序集
        }
    }
    
  • 检查主应用和类库的项目文件(.csproj),确认以下配置项存在,保证预编译视图正常生成、运行时编译上下文完整:
    <PropertyGroup>
      <TargetFramework>net48</TargetFramework>
      <MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
      <PreserveCompilationContext>true</PreserveCompilationContext>
      <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
    </PropertyGroup>
    
  • 确认编译/发布输出目录中,ApplicationName.Views.dll、LibraryName.Views.dll两个视图程序集和启动.exe处于同一级目录,没有被遗漏或放置到子文件夹。
验证方式

调整完成后重新编译,直接运行生成的exe文件,查看启动日志,会出现和dotnet run启动一致的view path was found调试日志,视图可正常加载渲染。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:24:31