.NET Core 3.0: มุมมองมีดโกนไม่คอมไพล์ใหม่โดยอัตโนมัติเมื่อมีการเปลี่ยนแปลง


94

ตามเอกสารประกอบมุมมอง Razor ควรคอมไพล์ใหม่ตามการเปลี่ยนแปลงในสภาพแวดล้อมภายในสำหรับ ASP.NET Core 3.0

อย่างไรก็ตามโครงการของฉันไม่ได้ทำในพื้นที่ หากฉันเปลี่ยนมุมมองและรีเฟรชเมื่อฉันแก้ไขจุดบกพร่องภายในเครื่องการเปลี่ยนแปลงจะไม่สะท้อนให้เห็น ฉันต้องหยุดการแก้ปัญหารันใหม่แล้วจึงเห็นการเปลี่ยนแปลง

ฉันกำลังทำสิ่งนี้บนเทมเพลต ASP.NET Core Web Application เริ่มต้นบน Visual Studio 2019 ด้วย ASP.NET Core 3.0.0 Preview 2 โดยใช้เพจ Razor หากฉันต้องการเปลี่ยนการตั้งค่าเพื่อเปิดใช้คุณลักษณะนี้มีความคิดอย่างไร

อัปเดตพฤศจิกายน 2019 สำหรับ 3.0 การเปิดตัวเต็ม:

คำถามนี้ยังคงได้รับการดูมากมาย มีการอ้างถึงคำตอบสองสามข้อเพื่อเพิ่ม

services.AddControllersWithViews().AddRazorRuntimeCompilation(); 

ไปยังConfigureServices()ฟังก์ชั่นของคุณStartup.csหลังจากเพิ่มMicrosoft.AspNetCore.Mvc.Razor.RuntimeCompilationแพ็คเกจ NuGet AddControllersWithViews()ในกรณีของฉันฉันเป็นเพียงการใช้มีดโกนหน้าดังนั้นผมจึงไม่ได้โทร แต่สิ่งนี้ใช้ได้ผลสำหรับฉัน:

services.AddRazorPages().AddRazorRuntimeCompilation();

.cshtml มุมมองมีดโกนจะได้รับการคอมไพล์ใหม่ คุณสามารถตรวจสอบอีกครั้งได้หรือไม่? ลองเพิ่ม <h1> การทดสอบ </h1> เริ่มแอพโหลดหน้า คุณควรเห็น "การทดสอบ" จากนั้นเปลี่ยนเป็น <h1> Foo </h1> คุณควรเห็น "Foo"
— John-Luke Laue

ใช้ไม่ได้! ฉันต้องหยุดและเริ่มต้นการแก้ปัญหา จับภาพได้ที่นี่: drive.google.com/file/d/1xOWQK2SvE2dskSYRdLz9X7iEmAv7BcTN/… - ลองหลาย ๆ เครื่องด้วยเทมเพลต Razor Pages
— tarun713

คุณใช้งานบน Mac หรือ PC หรือ linux หรือไม่? นอกจากนี้อาจมีปัญหากับการแสดงตัวอย่าง ลองใช้ asp.net core 2.x ได้ไหม
— John-Luke Laue

ตัวอย่าง PC, Visual Studio 2019 ฉันลองใช้ 2.2 แล้วมันได้ผล! มีบางอย่างที่เปลี่ยนไปใน 3.0
— tarun713

ฉันใช้. net core 3 / VS ที่อัปเดตเต็มรูปแบบและต้องเพิ่ม.AddRazorRuntimeCompilation();ขอบคุณ!
— duckwizzle

คำตอบ:


60

ตกลงดูเหมือนว่าจะยังไม่รองรับ :(

การคอมไพล์รันไทม์ถูกลบออกอันเป็นผลมาจากการล้างเฟรมเวิร์กที่ใช้ร่วมกันของ ASP.NET Core เพื่อไม่ให้ขึ้นอยู่กับ Roslyn การสนับสนุนการรวบรวมรันไทม์ของเพจและมุมมองจึงถูกลบออกในรีลีสการแสดงตัวอย่างนี้ด้วย แทนที่จะคอมไพล์เพจและมุมมองจะดำเนินการในเวลาสร้าง ในการอัปเดตตัวอย่างในอนาคตเราจะจัดเตรียมแพ็คเกจ NuGet สำหรับการเปิดใช้งานการสนับสนุนการรวบรวมรันไทม์ในแอป

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับปัญหาได้ที่นี่https://github.com/aspnet/Announcements/issues/343

แอปพลิเคชันที่ต้องการการคอมไพล์รันไทม์หรือการคอมไพล์ไฟล์ Razor ใหม่ควร:

  • เพิ่มการอ้างอิงไปยังMicrosoft.AspNetCore.Mvc.Razor.RuntimeCompilationแพ็คเกจ มันจะใช้ได้ในฐานะที่เป็นส่วนหนึ่งของ3.0.0-preview3ปล่อย
  • อัปเดตแอปพลิเคชันConfigureServicesเพื่อรวมการโทรไปที่AddMvcRazorRuntimeCompilation:

11
AddMvcRazorRuntimeCompilationอยู่AddRazorRuntimeCompilationกับ ASP.Net Core 3.0 Preview 4
— DB Fred

56

สำหรับ ASP.NET Core 3 รุ่นที่วางจำหน่าย:

   services.AddControllersWithViews().AddRazorRuntimeCompilation();

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

นอกจากนี้ยังสามารถเปิดใช้งานตามเงื่อนไขสำหรับการพัฒนาในท้องถิ่นเท่านั้นโดยอ้างจากลิงค์:

สามารถเปิดใช้งานการคอมไพล์รันไทม์เพื่อให้ใช้ได้เฉพาะกับการพัฒนาในเครื่องเท่านั้น การเปิดใช้งานตามเงื่อนไขในลักษณะนี้ทำให้มั่นใจได้ว่าเอาต์พุตที่เผยแพร่:

ใช้มุมมองที่รวบรวม
มีขนาดเล็กกว่า
ไม่เปิดใช้งานโปรแกรมดูไฟล์ในการผลิต

   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
    }

เคล็ดลับเกี่ยวกับเวอร์ชันของแพ็กเกจ nuget ที่เกี่ยวข้องกับเวอร์ชัน. Net core ในกรณีที่คุณใช้. Net Core 3.0 คุณจะไม่สามารถเลือกแพ็คเกจ Nuget รุ่นที่ใหม่กว่านี้ได้ แต่เวอร์ชัน 3.0.0 ของ Nuget lib ทำงานร่วมกับ. Net Core 3.0 หากคุณใช้. Net Core 3.1 คุณสามารถเลือกเวอร์ชันที่ใหม่กว่าได้
— Tore Aurstad

36

เพื่อรับการรวบรวมมุมมองรันไทม์กลับมาในASP.NET Core3

  1. ข้อมูลอ้างอิง Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
  2. โทร services.AddMvc().AddRazorRuntimeCompilation()
  3. นำออกMicrosoft.VisualStudio.Web.CodeGeneration.Designหากมีเวอร์ชันไม่ตรงกับMicrosoft.CodeAnalysis.Commonแพ็คเกจ

2
คำแนะนำสำหรับผู้อื่น: เมื่อใช้ Nuget ให้ทำเครื่องหมาย / เลือกช่อง "ก่อนเผยแพร่"
— GeoffM

มีวิธีป้องกันไม่ให้นำทรัพย์สินไปใช้ในการผลิตหรือไม่? ฉันลองใช้ PrivateAssets ร่วมกันใน PackageReference แต่ดูเหมือนจะไม่ได้ผล
— เจตน์

ในตัวเลือกมีดโกน Core 2.2 มี FileProviders และใช้งานได้แม้ไม่มีการคอมไพล์ใหม่ เพียงแก้ไข cshtml และ voila ในแกน 3 คุณสมบัตินี้จะถูกลบออก :( github.com/aspnet/AspNetCore/issues/14572
— dariol

1
+1 เนื่องจากการลบแพ็คเกจ Microsoft.VisualStudio.Web.CodeGeneration.Design เป็นซอสลับที่ไม่มีที่ไหนกล่าวถึง
— tkburbidge

@tkburbidge ฉันเพิ่งพบปัญหานั้นกับแพ็คเกจด้วย ผิดปกติพอฉันมีสองบรรทัดที่เหมือนกันทุกประการกลับไปกลับมา ฉันลบทั้งสองออกและสามารถรวบรวม ยิ่งไปกว่านั้นฉันก็วางเส้นกลับเข้าที่และยังสามารถรวบรวมได้
— Lynn Crumbling

26

เปิดใช้งานการคอมไพล์รันไทม์โดยใช้Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationแพ็คเกจ ในการเปิดใช้งานการคอมไพล์รันไทม์แอพต้อง:

  1. ติดตั้งMicrosoft.AspNetCore.Mvc.Razor.RuntimeCompilationแพ็คเกจ NuGet

  2. อัปเดตStartup.ConfigureServicesวิธีการของโครงการเพื่อรวมการโทรไปที่AddRazorRuntimeCompilation:

services
    .AddControllersWithViews()
    .AddRazorRuntimeCompilation();

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


13

ในการรับรันไทม์ Razor Views Compilation กลับมาใน ASP.NET Core 3.1:

  1. ติดตั้งMicrosoft.AspNetCore.Mvc.Razor.RuntimeCompilationแพ็คเกจ NuGet
  2. อัปเดตของโครงการวิธีการเพื่อให้มีการเรียกไปยังStartup.ConfigureServicesAddRazorRuntimeCompilation
  3. services.AddRazorPages().AddRazorRuntimeCompilation();

    การคอมไพล์ไฟล์ Razor ใน ASP.NET Core 3.1


11

ขั้นตอนที่ 1: ติดตั้งแพ็คเกจด้านล่างจาก NuGet Package Manager for Solution

Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

ขั้นตอนที่ 2: เพิ่มโค้ดด้านล่างใน ConfigureServices ของไฟล์ Startup.cs

services.AddControllersWithViews (). AddRazorRuntimeCompilation ();

บันทึกหน้าแล้วรีเฟรชเบราว์เซอร์ไคลเอนต์

หากคุณใช้ Razor ให้เพิ่มรหัสสำหรับ services.AddRazorPages () AddRazorRuntimeCompilation ();


6

เพียงบันทึกเพิ่มเติม - คุณอาจต้องการเปิดใช้งานการคอมไพล์รันไทม์ตามเงื่อนไขเท่านั้นเพื่อให้เอาต์พุตที่เผยแพร่

  • ใช้มุมมองที่รวบรวม
  • มีขนาดเล็กกว่า
  • ไม่เปิดใช้งานโปรแกรมดูไฟล์ในการผลิต

เปิดใช้งานการคอมไพล์รันไทม์ตามเงื่อนไข


5

ใน. NET Core 3.1 คุณต้องปิดการสร้างviews.dllไฟล์

  1. เพิ่มรหัสด้านล่างลงใน.csprojไฟล์ของคุณ(ในรูทของโครงการของคุณ):

    <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. ติดตั้งแพ็คเกจด้านล่างจาก NuGet Package Manager สำหรับโซลูชัน

    Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
    
  3. เพิ่มรหัสด้านล่างในConfigureServicesวิธีการของStartup.csไฟล์ของคุณ:

    services.AddMvc().AddRazorRuntimeCompilation();
    

    หรือ

    services.AddControllersWithViews().AddRazorRuntimeCompilation();
    

    หรือ

    services.AddRazorPages().AddRazorRuntimeCompilation();
    

หลังจากนี้เผยแพร่อีกครั้งและเรียกใช้ มันจะทำงาน.


0

วิธีที่ง่ายที่สุดในการกำหนดค่า Runtime Compilation สำหรับ Local Development เท่านั้นคือการอัปเดตโปรไฟล์การเปิดตัวในlaunchSettings.json. วิธีนี้ไม่จำเป็นต้องมีการเปลี่ยนแปลงโค้ดเพื่อกำหนดค่าโปรเจ็กต์ที่กำลังทำงานในเครื่อง (จะไม่ส่งผลต่อการผลิตของคุณ)

ดูเอกสารอย่างเป็นทางการ :

  1. ติดตั้งแพคเกจMicrosoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet
  2. ปรับเปลี่ยนสภาพแวดล้อมโปรไฟล์การเปิดตัวส่วนตัวแปรใน launchSettings.json:
    • ASPNETCORE_ENVIRONMENTตั้งค่าการยืนยันเป็น "การพัฒนา"
    • ตั้งค่าASPNETCORE_HOSTINGSTARTUPASSEMBLIESเป็น "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"

ตัวอย่าง:

{
  "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"
      }
    }
  }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.