.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.