web-dev-qa-db-fra.com

Utilisez Razor sans Microsoft.NET.Sdk.Web

J'écris consoleApp simple (netcoreapp2.0)

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

et voulez utiliser le serveur web avec mvc.

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");
}

Je reçois une erreur alors que je reçois http // localhost: 5000

Une ou plusieurs références de compilation sont manquantes. Assurez-vous que votre projet référence bien 'Microsoft.NET.Sdk.Web' et que la propriété 'PreserveCompilationContext' n'est pas définie sur false.

La raison est probablement dans Razor Engine. Comment puis-je le faire fonctionner? Qu'est-ce que j'ai raté?

5
Sergey Shuvalov

Ce message d'erreur peut être dû à un @using manquant dans votre fichier de vue Index.cshtml. Essayez de contourner la vue d'index et de simplement renvoyer une chaîne de votre contrôleur comme ceci pour voir si le message d'erreur disparaît.

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>
3
Padhraic

Cela m'est arrivé lorsqu'une vue faisait référence à un modèle qui n'existait plus. Dans mon cas, c'était une page de confirmation, donc pas la "grande" vue avec laquelle j'avais travaillé. Si vous ouvrez beaucoup de points de vue dans VS, les erreurs peuvent devenir évidentes. 

0
Eric