在没有Microsoft.NET.Sdk.Web的情况下使用Razor

时间:2017-09-21 11:30:11

标签: razor asp.net-core asp.net-core-2.0 razorengine

我正在编写简单的consoleApp(netcoreapp2.0)

<Project Sdk="Microsoft.NET.Sdk">

并希望使用mvc。

运行webserver
class Program
{
    static void Main(string[] args)
    {
        WebHost.CreateDefaultBuilder()
            .ConfigureServices(services => services.AddMvc())
            .Configure(app => app.UseDeveloperExceptionPage().UseMvcWithDefaultRoute())
            .UseHttpSys().Build().Run();
    }
}

public class HomeController : Controller
{
    [HttpGet] public ActionResult Index() => View("Index");
}

GET http // localhost:5000

时出错
  

缺少一个或多个编译引用。确保您的项目引用了Microsoft.NET.Sdk.Web&#39;和&#39; PreserveCompilationContext&#39; property未设置为false。

可能是Razor Engine的原因。 我怎样才能使它工作?我错过了什么?

2 个答案:

答案 0 :(得分:3)

错误消息可能是由@using视图文件中缺少Index.cshtml引起的。尝试绕过索引视图,只需从控制器返回一个字符串,以查看错误消息是否消失。

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            WebHost.CreateDefaultBuilder()
                .ConfigureServices(services => services.AddMvc())
                .Configure(app => app.UseDeveloperExceptionPage().UseMvcWithDefaultRoute())
                .UseHttpSys().Build().Run();
        }
    }

    public class HomeController : Controller
    {
        [HttpGet] public string Index() => "Hello World!";
    }
}

<强>的csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Server.HttpSys" Version="2.0.0" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.0.0" />
  </ItemGroup>

</Project>

答案 1 :(得分:0)

当视图引用不再存在的模型时发生在我身上。在我的情况下,它是一个确认页面,所以不是我一直在使用的“大”视图。如果在VS中打开很多视图,错误可能会变得明显。