【发布时间】:2019-11-02 00:23:39
【问题描述】:
我正在尝试将 ASP.NET MVC 4.x 应用程序移植到 ASP.NET Core 2.2。 WebApi 效果很好,但我坚持移植 MVC 视图。我创建了一个完整的“最低限度可行”的复制品来说明我的意思。 Program.cs 如下所示:
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
namespace TestApp
{
public class Program
{
static void Main(string[] args)
{
string port = "9005";
var host = new WebHostBuilder()
.UseKestrel()
.UseStartup<Startup>()
.UseUrls($"http://0.0.0.0:{port}")
.Build();
host.Run();
}
}
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services
.AddMvcCore()
.AddRazorViewEngine()
.AddJsonFormatters();
}
public void Configure(IApplicationBuilder app)
{
app.UseMvcWithDefaultRoute();
}
}
}
我在 Controllers\HomeController.cs 中有一个控制器,如下所示:
using Microsoft.AspNetCore.Mvc;
namespace TestApp.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
}
我在 Views\Home\Index.cshtml 有一个视图,如下所示:
@{
var x = "Test";
}
Home page
当我运行程序时,我可以确认我在return View(); 处命中了断点——我没有遇到任何异常或任何情况。但是,浏览器会返回错误 500 并且没有任何显示。
我的理论是我错过了将 Index.cshtml 编译成 ASP.NET Core MVC 框架可以找到的东西的任何机制。我做了一些研究,但目前还不清楚这一切是如何运作的。有一个名为Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 的东西显然会在运行时编译 cshtml 文件,但它具有 .NET Core 依赖项。在 ASP.NET 4.x 世界中,我相信有一个 ASP.NET 编译器可以作为处理此类事情的构建目标运行,但它是如何工作的还不清楚。几乎每个 ASP.NET Core 的 Visual Studio 模板都是围绕 .NET Core 构建的,这似乎神奇地使这些东西工作,但我不确定如何。任何人都知道接下来的步骤是什么让这个工作?谢谢!
PS: 我不能在 .NET Core 框架上运行的原因是因为这个项目对遗留的 .NET Framework (Windows) 代码有大量依赖,这需要数年时间才能移植过来。
编辑:这是我的整个 CSPROJ 文件(我尝试了几个 SDK 均无济于事)
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net461</TargetFramework>
<OutputPath>bin\$(Configuration)\</OutputPath>
<DebugType>portable</DebugType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Formatters.Json" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.ViewFeatures" Version="2.2.0" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Net.Http" />
</ItemGroup>
</Project>
【问题讨论】:
标签: asp.net-mvc asp.net-core razor