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

.NET 4.6.1服务集成Kestrel后返回View时抛出‘Microsoft命名空间未找到’错误求助

解决.NET 4.6.1项目中ASP.NET Core视图编译错误的问题

你遇到的是.NET Framework 4.6.1环境下ASP.NET Core Razor视图编译时缺少必要引用的问题,这是因为.NET Framework项目集成ASP.NET Core时,默认的Razor编译配置和引用复制逻辑和纯ASP.NET Core项目存在差异。下面是具体的解决方案:

1. 补充必要的NuGet包

除了你已添加的包,还需要安装以下兼容.NET 4.6.1的ASP.NET Core 3.1.x系列包(.NET 5+不再支持.NET Framework,所以要统一用3.1.x版本):

  • Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation:提供Razor视图的运行时编译支持,开发环境下调试更便捷
  • Microsoft.AspNetCore.Mvc.ViewFeatures:视图功能的核心依赖组件
  • Microsoft.AspNetCore.Razor.Design:辅助Razor编译的构建工具包

可以通过NuGet包管理器或者Package Manager Console安装:

Install-Package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation -Version 3.1.32
Install-Package Microsoft.AspNetCore.Mvc.ViewFeatures -Version 3.1.32
Install-Package Microsoft.AspNetCore.Razor.Design -Version 3.1.32

2. 修改项目文件(.csproj)配置

打开你的项目文件,添加以下配置项,确保编译和发布时引用程序集被正确复制:

<PropertyGroup>
  <!-- 确保发布时将引用程序集复制到refs目录 -->
  <CopyRefAssembliesToPublishDirectory>true</CopyRefAssembliesToPublishDirectory>
  <!-- 启用构建和发布阶段的Razor编译 -->
  <RazorCompileOnBuild>true</RazorCompileOnBuild>
  <RazorCompileOnPublish>true</RazorCompileOnPublish>
  <!-- 确认目标框架设置正确 -->
  <TargetFramework>net461</TargetFramework>
</PropertyGroup>

3. 添加并配置web.config文件

.NET Framework项目需要web.config来配置ASP.NET Core托管和Razor编译的引用:

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.6.1">
      <assemblies>
        <!-- 添加Razor和ASP.NET Core必要的程序集引用 -->
        <add assembly="Microsoft.AspNetCore.Mvc.Razor, Version=3.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60" />
        <add assembly="Microsoft.AspNetCore.Razor.Runtime, Version=3.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60" />
        <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      </assemblies>
    </compilation>
  </system.web>

  <system.webServer>
    <!-- 配置ASP.NET Core托管模块 -->
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\YourProjectName.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" />
  </system.webServer>
</configuration>

注意把YourProjectName替换成你的实际项目名称。

4. 启用Razor运行时编译(开发环境)

在你的_configureServices委托中添加运行时编译配置,这样修改视图后无需重新编译整个项目:

static Action<IServiceCollection> _configureServices = (services) => {
    services.AddMvc().AddRazorRuntimeCompilation(); // 添加这一行
    services.AddRouting();
};

5. 配置视图全局命名空间

在你的Views目录下创建_ViewImports.cshtml文件,添加必要的命名空间引用,避免每个视图都手动添加:

@using Microsoft.AspNetCore.Mvc
@using Microsoft.AspNetCore.Mvc.ViewFeatures
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

完成以上步骤后,重新构建并运行项目,应该就能正常返回View了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 14:39:08