.NET Core 3.0: Razor-Ansichten werden bei Änderungen nicht automatisch neu kompiliert

94

Gemäß der Dokumentation sollten Razor-Ansichten bei Änderungen in lokalen Umgebungen für ASP.NET Core 3.0 standardmäßig neu kompiliert werden.

Mein Projekt tut dies jedoch nicht lokal. Wenn ich beim lokalen Debuggen eine Ansicht ändere und aktualisiere, wird die Änderung nicht übernommen. Ich muss die Lösung stoppen, erneut ausführen und dann die Änderung sehen.

Ich mache dies auf einer Standardvorlage für ASP.NET Core-Webanwendungen in Visual Studio 2019 mit ASP.NET Core 3.0.0 Preview 2 unter Verwendung von Razor-Seiten. Haben Sie eine Idee, ob ich Einstellungen ändern muss, um diese Funktion zu aktivieren?

UPDATE NOV 2019 FÜR 3.0 VOLLSTÄNDIGE VERÖFFENTLICHUNG:

Diese Frage bekommt immer noch viele Ansichten. Einige Antworten haben zitiert, um hinzuzufügen

services.AddControllersWithViews().AddRazorRuntimeCompilation(); 

Zu Ihrer ConfigureServices()Funktion Startup.csnach dem Hinzufügen des Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationNuGet-Pakets. In meinem Fall verwende ich nur Rasiermesserseiten, also rufe ich nicht an AddControllersWithViews(). Stattdessen hat das bei mir funktioniert:

services.AddRazorPages().AddRazorRuntimeCompilation();
tarun713
quelle
.cshtml-Rasiereransichten werden neu kompiliert. Können Sie das überprüfen? Versuchen Sie, einen <h1> -Test </ h1> hinzuzufügen. Starten Sie die App, laden Sie die Seite. Sie sollten "Test" sehen. Ändern Sie dies dann in <h1> Foo </ h1>. Sie sollten "Foo" sehen.
John-Luke Laue
Funktioniert nicht! Ich muss die Lösung stoppen und starten. Erfasste es hier: drive.google.com/file/d/1xOWQK2SvE2dskSYRdLz9X7iEmAv7BcTN/… - Habe mehrere Computer mit der Standardvorlage Razor Pages ausprobiert.
Tarun713
Laufen Sie ein auf Mac oder PC oder Linux? Möglicherweise liegt auch ein Problem mit der Vorschau vor. Können Sie versuchen, asp.net core 2.x zu verwenden?
John-Luke Laue
PC, Visual Studio 2019 Vorschau. Ich habe es mit 2.2 versucht und es funktioniert! In 3.0 hat sich also etwas geändert.
Tarun713
Ich bin auf einem vollständig aktualisierten .net Core 3 / VS und musste hinzufügen .AddRazorRuntimeCompilation();Danke!
duckwizzle

Antworten:

60

OK, es sieht so aus, als ob es noch nicht unterstützt wird :(

Laufzeitkompilierung entfernt Als Folge der Bereinigung des gemeinsam genutzten ASP.NET Core-Frameworks, um nicht von Roslyn abhängig zu sein, wurde die Unterstützung für die Laufzeitkompilierung von Seiten und Ansichten in dieser Vorschauversion ebenfalls entfernt. Stattdessen wird die Erstellung von Seiten und Ansichten zur Erstellungszeit durchgeführt. In einem zukünftigen Vorschau-Update werden wir NuGet-Pakete bereitstellen, um optional die Unterstützung für die Laufzeitkompilierung in einer App zu aktivieren.

Weitere Informationen zu diesem Problem finden Sie hier https://github.com/aspnet/Announcements/issues/343

Anwendungen, die eine Laufzeitkompilierung oder Neukompilierung von Razor-Dateien erfordern, sollten:

  • Fügen Sie dem Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationPaket einen Verweis hinzu . Es wird als Teil der Version 3.0.0-Preview3 verfügbar sein .
  • Aktualisieren Sie die Anwendung ConfigureServices, um einen Aufruf an Folgendes aufzunehmen AddMvcRazorRuntimeCompilation:
Lukáš Kmoch
quelle
11
AddMvcRazorRuntimeCompilationist AddRazorRuntimeCompilationmit ASP.Net Core 3.0 Vorschau 4
DB Fred
56

Für ASP.NET Core 3 Release-Version:

   services.AddControllersWithViews().AddRazorRuntimeCompilation();

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.0

Es kann auch nur für die lokale Entwicklung bedingt aktiviert werden, wie aus dem Link hervorgeht:

Die Laufzeitkompilierung kann so aktiviert werden, dass sie nur für die lokale Entwicklung verfügbar ist. Durch die bedingte Aktivierung auf diese Weise wird sichergestellt, dass die veröffentlichte Ausgabe:

Verwendet kompilierte Ansichten.
Ist kleiner.
Aktiviert keine Datei-Watcher in der Produktion.

   public Startup(IConfiguration configuration, IWebHostEnvironment env)
    {
        Configuration = configuration;
        Env = env;
    }

    public IWebHostEnvironment Env { get; set; }
    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        IMvcBuilder builder = services.AddRazorPages();

#if DEBUG
            if (Env.IsDevelopment())
            {
                builder.AddRazorRuntimeCompilation();
            }
#endif
    }
Rauland
quelle
Tipp zu Versionen des Nuget-Pakets, die sich auf die .Net-Kernversion beziehen. Wenn Sie .Net Core 3.0 verwenden, können Sie die späteren Versionen dieses Nuget-Pakets nicht auswählen. Version 3.0.0 der Nuget lib funktioniert jedoch mit .Net Core 3.0. Wenn Sie .Net Core 3.1 verwenden, können Sie neuere Versionen auswählen.
Tore Aurstad
36

So erhalten Sie die Kompilierung der Laufzeitansicht in ASP.NET Core3

  1. Referenz Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
  2. Anruf services.AddMvc().AddRazorRuntimeCompilation()
  3. Entfernen Sie diese, Microsoft.VisualStudio.Web.CodeGeneration.Designwenn das Microsoft.CodeAnalysis.CommonPaket eine Versionsinkongruenz aufweist
Dmitry Pavlov
quelle
2
Nur ein Hinweis für andere: Wenn Sie Nuget verwenden, aktivieren / aktivieren Sie das Kontrollkästchen "Pre-Release".
GeoffM
Gibt es eine Möglichkeit zu verhindern, dass die Assets für die Produktion bereitgestellt werden? Ich habe einige Kombinationen von PrivateAssets in der PackageReference ausprobiert, aber es scheint nicht zu funktionieren.
Chet
In Core 2.2 hat Razor Options FileProviders und es funktioniert auch ohne Neukompilierung. Bearbeiten Sie einfach cshtml und voila. In Kern 3 wird diese Eigenschaft entfernt. :( github.com/aspnet/AspNetCore/issues/14572
Dariol
1
+1, weil das Entfernen des Microsoft.VisualStudio.Web.CodeGeneration.Design-Pakets die geheime Sauce war, die nirgendwo anders erwähnt wird.
tkburbidge
@tkburbidge Ich bin gerade auch auf dieses Problem mit dem Paket gestoßen. Seltsamerweise hatte ich zwei Zeilen, die genau gleich waren, Rücken an Rücken. Ich habe beide entfernt und konnte kompilieren. Noch seltsamer war es , dass ich die Zeilen wieder in Position brachte und immer noch kompilieren konnte.
Lynn Crumbling
26

Die Laufzeitkompilierung wird mithilfe des Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationPakets aktiviert . Um die Laufzeitkompilierung zu aktivieren, müssen Apps:

  1. Installieren Sie das Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationNuGet-Paket.

  2. Aktualisieren Sie die Projektmethode Startup.ConfigureServices, um einen Aufruf an Folgendes aufzunehmen AddRazorRuntimeCompilation:

services
    .AddControllersWithViews()
    .AddRazorRuntimeCompilation();

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.0

kevic
quelle
13

So erhalten Sie die Razor Views-Kompilierung zur Laufzeit in ASP.NET Core 3.1 zurück:

  1. Installieren Sie das Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationNuGet-Paket.
  2. Aktualisieren Sie die Projektmethode Startup.ConfigureServices, um einen Aufruf von aufzunehmen AddRazorRuntimeCompilation.
  3. services.AddRazorPages().AddRazorRuntimeCompilation();;

    Kompilierung von Rasiermesserdateien in ASP.NET Core 3.1

Naman Upadhyay
quelle
11

Schritt 1: Installieren Sie das folgende Paket von NuGet Package Manager for Solution.

Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

Schritt 2: Fügen Sie den folgenden Code in die Datei ConfigureServices of Startup.cs ein

services.AddControllersWithViews (). AddRazorRuntimeCompilation ();

Speichern Sie die Seite und aktualisieren Sie den Client-Browser.

Wenn Sie Razor verwenden, fügen Sie den Code für services.AddRazorPages () hinzu. AddRazorRuntimeCompilation ();

psuneel127
quelle
6

Nur ein zusätzlicher Hinweis - Sie möchten diese Laufzeitkompilierung möglicherweise nur bedingt aktivieren, damit die veröffentlichte Ausgabe:

  • Verwendet kompilierte Ansichten.
  • Ist kleiner.
  • Aktiviert keine Datei-Watcher in der Produktion.

Aktivieren Sie die Laufzeitkompilierung bedingt

BryanCass
quelle
5

In .NET Core 3.1 müssen Sie die Generierung der views.dllDatei deaktivieren .

  1. Fügen Sie der .csprojDatei den folgenden Code hinzu (im Stammverzeichnis Ihres Projekts):

    <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>
        <UserSecretsId>...</UserSecretsId>
    
        <!-- add from this line: -->
        <CopyRazorGenerateFilesToPublishDirectory>true</CopyRazorGenerateFilesToPublishDirectory>
        <CopyRefAssembliesToPublishDirectory>false</CopyRefAssembliesToPublishDirectory>
        <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
        <RazorCompileOnBuild>false</RazorCompileOnBuild>
        <!-- to this line. -->
    
    </PropertyGroup>
    
  2. Installieren Sie das folgende Paket aus dem NuGet Package Manager für die Lösung.

    Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
    
  3. Fügen Sie der ConfigureServicesMethode Ihrer Startup.csDatei den folgenden Code hinzu :

    services.AddMvc().AddRazorRuntimeCompilation();
    

    Oder

    services.AddControllersWithViews().AddRazorRuntimeCompilation();
    

    Oder

    services.AddRazorPages().AddRazorRuntimeCompilation();
    

Veröffentlichen Sie danach erneut und führen Sie es aus. Es wird klappen.

Ali Rasouli
quelle
0

Die einfachste Möglichkeit, die Laufzeitkompilierung nur für die lokale Entwicklung zu konfigurieren, besteht darin, die Startprofile in zu aktualisieren launchSettings.json. Diese Methode erfordert keine Codeänderungen, um ein Projekt zu konfigurieren, das lokal ausgeführt wird (dies hat keine Auswirkungen auf Ihre Produktion).

Siehe die offizielle Dokumentation :

  1. Installieren Sie Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet-Paket .
  2. Ändern Sie den Abschnitt "Startprofil UmgebungVariablen" in launchSettings.json:
    • Verify ASPNETCORE_ENVIRONMENTist auf "Entwicklung" eingestellt.
    • Auf ASPNETCORE_HOSTINGSTARTUPASSEMBLIES"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" setzen.

Beispiel:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:57676",
      "sslPort": 44364
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
      }
    },
    "RazorPagesApp": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
      }
    }
  }
}
Schere
quelle