Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 是否可以在.NET Framework 4.6.1控制台应用程序上使用ASP.NET Core 2.x MVC_Asp.net Mvc_Asp.net Core_Razor - Fatal编程技术网

Asp.net mvc 是否可以在.NET Framework 4.6.1控制台应用程序上使用ASP.NET Core 2.x MVC

Asp.net mvc 是否可以在.NET Framework 4.6.1控制台应用程序上使用ASP.NET Core 2.x MVC,asp.net-mvc,asp.net-core,razor,Asp.net Mvc,Asp.net Core,Razor,我正在尝试将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

我正在尝试将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();
        }
    }
}
using Microsoft.AspNetCore.Mvc;

namespace TestApp.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
}
@{
    var x = "Test";
}

Home page
我在Views\Home\Index.cshtml中有一个视图,如下所示:

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();
        }
    }
}
using Microsoft.AspNetCore.Mvc;

namespace TestApp.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
}
@{
    var x = "Test";
}

Home page
当我运行程序时,我可以确认我在
returnview()处命中了断点-我没有得到任何例外或任何东西。但是,浏览器将返回错误500,并且不显示任何内容

我的理论是,我缺少将Index.cshtml编译成ASP.NET核心MVC框架可以找到的内容的机制。我做了一些研究,但还不清楚这一切是如何运作的。有一种叫做
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
的东西,它显然在运行时编译cshtml文件,但它有一个.NET核心依赖项。在ASP.NET 4.x的世界里,我相信有一个ASP.NET编译器可以作为构建目标运行来处理这类事情,但它是如何工作的还不清楚。几乎每一个ASP.NET核心的Visual Studio模板都是围绕.NET核心构建的,它似乎神奇地使这些东西工作起来,但我不确定如何工作。有人知道下一步该怎么做才能让它发挥作用吗?谢谢

PS:我无法在.NET核心框架上运行的原因是,该项目对遗留的.NET framework(Windows)代码有大量依赖性,这需要数年时间才能移植

编辑:这是我的整个CSPROJ文件(我尝试了一些SDK,但没有用)


Exe
net461
bin\$(配置)\
便携式的

当您的项目以.NET Framework为目标时,您应该安装该软件包

它包含启用Razor视图编译所需的构建时引用

将其包引用包括到您的
.csproj
文件中:

<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="2.2.0" PrivateAssets="All" />

我安装了这个软件包,但它仍然不能工作。如果在EXE上运行
ildasm
,则在视图命名空间中看不到任何内容,因此我认为没有编译任何内容。我是否需要向CSPROJ中添加任何内容来实际告诉它编译这些文件?或者,是否有一个SDK可以在上为我使用?谢谢我也发现了一些帮助-基本上我必须在CSPROJ文件中放入一个
,然后将一些东西通过DLL复制到输出目录。@MikeChristensen非常感谢你的赏金。