.NET Core 3.0: Chế độ xem Razor không tự động biên dịch lại khi thay đổi


94

Theo tài liệu , các khung nhìn Razor, theo mặc định, nên biên dịch lại sự thay đổi trên môi trường cục bộ cho ASP.NET Core 3.0.

Tuy nhiên, dự án của tôi không làm điều này cục bộ. Nếu tôi thay đổi chế độ xem và làm mới khi tôi đang gỡ lỗi cục bộ, thì thay đổi sẽ không được phản ánh. Tôi phải dừng giải pháp, chạy lại và sau đó xem sự thay đổi.

Tôi đang thực hiện việc này trên mẫu Ứng dụng web ASP.NET Core mặc định trên Visual Studio 2019 với ASP.NET Core 3.0.0 Preview 2 bằng cách sử dụng các trang Razor. Bất kỳ ý tưởng nào nếu tôi cần thay đổi cài đặt để bật tính năng này?

CẬP NHẬT THÁNG 11 NĂM 2019 CHO BẢN PHÁT HÀNH 3.0 ĐẦY ĐỦ:

Câu hỏi này vẫn nhận được rất nhiều lượt xem. Một số câu trả lời đã được trích dẫn để thêm

services.AddControllersWithViews().AddRazorRuntimeCompilation(); 

ConfigureServices()Chức năng của bạn trong Startup.cssau khi thêm Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationgói NuGet. Trong trường hợp của tôi, tôi chỉ đang sử dụng Razor Pages, vì vậy tôi không gọi AddControllersWithViews(). Thay vào đó, điều này đã làm việc cho tôi:

services.AddRazorPages().AddRazorRuntimeCompilation();

.cshtml các chế độ xem dao cạo được biên dịch lại. Bạn có thể kiểm tra lại? Thử thêm <h1> Kiểm tra </h1>. Khởi động ứng dụng, tải trang. bạn sẽ thấy "Kiểm tra". Sau đó, thay đổi điều này thành <h1> Foo </h1>. Bạn sẽ thấy "Foo".
John-Luke Laue

Không hoạt động! Tôi phải dừng lại và bắt đầu giải pháp. Đã chụp tại đây: drive.google.com/file/d/1xOWQK2SvE2dskSYRdLz9X7iEmAv7BcTN/… - Đã thử trên nhiều máy với mẫu Razor Pages có sẵn.
tarun713

Bạn đang chạy trên mac hoặc pc hoặc linux? Ngoài ra, nó có thể là một vấn đề với bản xem trước. Bạn có thể thử sử dụng asp.net core 2.x không?
John-Luke Laue,

Bản xem trước PC, Visual Studio 2019. Tôi đã thử với 2.2 và nó hoạt động! Vì vậy, có một cái gì đó đã thay đổi trong 3.0.
tarun713,

Tôi đang sử dụng .net core 3 / VS được cập nhật đầy đủ và phải thêm .AddRazorRuntimeCompilation();Cảm ơn bạn!
duckwizzle

Câu trả lời:


60

OK, có vẻ như nó chưa được hỗ trợ :(

Đã xóa biên dịch thời gian chạy Do việc dọn dẹp khung chia sẻ ASP.NET Core để không phụ thuộc vào Roslyn, hỗ trợ biên dịch thời gian chạy các trang và chế độ xem cũng đã bị xóa trong bản phát hành xem trước này. Thay vào đó, việc biên dịch các trang và chế độ xem được thực hiện tại thời điểm xây dựng. Trong bản cập nhật xem trước trong tương lai, chúng tôi sẽ cung cấp gói NuGet để tùy chọn bật hỗ trợ biên dịch thời gian chạy trong một ứng dụng.

Bạn có thể đọc thêm về sự cố tại đây https://github.com/aspnet/Anosystemments/issues/343

Các ứng dụng yêu cầu biên dịch thời gian chạy hoặc biên dịch lại tệp Razor nên:

  • Thêm một tham chiếu đến Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationgói. Nó sẽ có sẵn như một phần của bản phát hành 3.0.0-preview3 .
  • Cập nhật ứng dụng ConfigureServicesđể bao gồm cuộc gọi đến AddMvcRazorRuntimeCompilation:

11
AddMvcRazorRuntimeCompilationAddRazorRuntimeCompilationvới ASP.Net Lõi 3.0 Preview 4
DB Fred

56

Đối với phiên bản phát hành ASP.NET Core 3:

   services.AddControllersWithViews().AddRazorRuntimeCompilation();

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

Nó cũng có thể được kích hoạt chỉ có điều kiện để phát triển cục bộ, trích dẫn từ liên kết:

Biên dịch thời gian chạy có thể được kích hoạt để nó chỉ có sẵn cho phát triển cục bộ. Kích hoạt có điều kiện theo cách này đảm bảo rằng đầu ra được xuất bản:

Sử dụng các dạng xem đã biên dịch.
Có kích thước nhỏ hơn.
Không bật trình xem tệp trong sản xuất.

   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
    }

Mẹo về các phiên bản của gói nuget liên quan đến phiên bản lõi .Net. Trong trường hợp bạn sử dụng .Net Core 3.0, bạn không thể chọn các phiên bản mới hơn của gói Nuget này. Nhưng phiên bản 3.0.0 của Nuget lib hoạt động với .Net Core 3.0. Nếu bạn sử dụng .Net Core 3.1, bạn có thể chọn các phiên bản mới hơn.
Tore Aurstad

36

Để lấy lại thời gian chạy chế độ xem biên dịch trong ASP.NET Core3

  1. Tài liệu tham khảo Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
  2. Gọi services.AddMvc().AddRazorRuntimeCompilation()
  3. Xóa Microsoft.VisualStudio.Web.CodeGeneration.Designnếu có phiên bản không khớp trên Microsoft.CodeAnalysis.Commongói

2
Chỉ là một gợi ý cho những người khác: khi sử dụng Nuget, hãy đánh dấu / đánh dấu vào ô "pre-release".
GeoffM

Có cách nào để ngăn tài sản được triển khai vào sản xuất không? Tôi đã thử một số cách kết hợp PrivateAssets trên PackageReference nhưng có vẻ như nó không hoạt động.
Chet

Trong tùy chọn dao cạo Core 2.2 có FileProviders và nó hoạt động ngay cả khi không có bất kỳ biên dịch lại nào. Chỉ cần chỉnh sửa cshtml và thì đấy. Trong lõi 3, thuộc tính này bị loại bỏ. :( github.com/aspnet/AspNetCore/issues/14572
dariol

1
+1 vì loại bỏ gói Microsoft.VisualStudio.Web.CodeGeneration.Design là nước sốt bí mật mà không nơi nào khác đề cập đến.
tkburbidge

@tkburbidge Tôi cũng vừa gặp phải vấn đề đó với gói. Thật kỳ lạ, tôi có hai dòng giống hệt nhau, quay ngược lại nhau. Tôi đã gỡ bỏ cả hai và có thể biên dịch. Kỳ lạ hơn nữa , sau đó tôi đặt các dòng lại đúng vị trí, và vẫn có thể biên dịch.
Lynn Crunch

26

Biên dịch thời gian chạy được kích hoạt bằng cách sử dụng Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationgói. Để bật biên dịch thời gian chạy, các ứng dụng phải:

  1. Cài đặt Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationgói NuGet.

  2. Cập nhật Startup.ConfigureServicesphương thức của dự án để bao gồm lời gọi tới AddRazorRuntimeCompilation:

services
    .AddControllersWithViews()
    .AddRazorRuntimeCompilation();

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


13

Để lấy lại thời gian chạy Razor Views Compilation trong ASP.NET Core 3.1:

  1. Cài đặt Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationgói NuGet.
  2. Cập nhật Startup.ConfigureServicesphương thức của dự án để bao gồm một cuộc gọi đến AddRazorRuntimeCompilation.
  3. services.AddRazorPages().AddRazorRuntimeCompilation();

    Biên dịch tệp dao cạo trong ASP.NET Core 3.1


11

Bước 1: Cài đặt gói bên dưới từ NuGet Package Manager for Solution.

Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

Bước 2: Thêm mã bên dưới vào tệp ConfigureServices của Startup.cs

services.AddControllersWithViews (). AddRazorRuntimeCompilation ();

Lưu trang và sau đó làm mới trình duyệt máy khách.

Nếu bạn đang sử dụng Razor thì hãy thêm mã cho services.AddRazorPages (). AddRazorRuntimeCompilation ();


6

Chỉ là một ghi chú được thêm vào - bạn có thể chỉ muốn kích hoạt có điều kiện biên dịch thời gian chạy này, để đầu ra được xuất bản:

  • Sử dụng các dạng xem đã biên dịch.
  • Có kích thước nhỏ hơn.
  • Không bật trình xem tệp trong sản xuất.

Bật biên dịch thời gian chạy có điều kiện


5

Trong .NET Core 3.1, bạn cần vô hiệu hóa việc tạo views.dlltệp.

  1. Thêm mã dưới đây vào .csprojtệp của bạn (trong thư mục gốc của dự án của bạn):

    <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. Cài đặt gói bên dưới từ Trình quản lý gói NuGet cho Giải pháp.

    Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
    
  3. Thêm mã dưới đây vào ConfigureServicesphương thức của Startup.cstệp của bạn :

    services.AddMvc().AddRazorRuntimeCompilation();
    

    Hoặc là

    services.AddControllersWithViews().AddRazorRuntimeCompilation();
    

    Hoặc là

    services.AddRazorPages().AddRazorRuntimeCompilation();
    

Sau đó, hãy xuất bản lại và chạy nó. Nó sẽ hoạt động.


0

Cách đơn giản nhất để định cấu hình Biên dịch thời gian chạy chỉ dành cho Phát triển cục bộ là cập nhật các cấu hình khởi chạy trong launchSettings.json. Phương pháp này không yêu cầu thay đổi mã để định cấu hình một dự án đang chạy cục bộ (nó sẽ không ảnh hưởng đến quá trình sản xuất của bạn).

Xem tài liệu chính thức :

  1. Cài đặt gói Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet.
  2. Sửa đổi phần Môi trường hồ sơ khởi chạy Biến trong launcherSettings.json:
    • Xác minh ASPNETCORE_ENVIRONMENTđược đặt thành "Phát triển".
    • Đặt ASPNETCORE_HOSTINGSTARTUPASSEMBLIESthành "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation".

Thí dụ:

{
  "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"
      }
    }
  }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.