Сторінка .NET Core MVC не оновлюється після змін


113

Я будую .NET Core MVC на останній версії 2.2. У мене виникають проблеми, коли я вношу зміни у файл CSHTML та оновлюю сторінку, мої зміни не відображаються у браузері. Мені потрібно перезапустити проект, щоб побачити мої зміни. Це відбувається вже деякий час, тому я точно не впевнений, які зміни спричинили цю проблему.

Я спробував використовувати хром "Порожній кеш і жорстке перезавантаження", а також інші браузери безрезультатно. Це відбувається в Windows і Mac за допомогою Visual Studio для Mac і VS Code

У проекті .Net Core за замовчуванням він працює нормально, тому це, мабуть, щось у моєму проекті, що змінювалось у процесі. Цікаво, з чого мені потрібно починати, щоб налагодити цю проблему? Я намагався коментувати майже все, що міститься в моєму документі, Startup.csі Program.csне мав жодної резолюції.


Я стикаюся з тим самим MissingMethodException, про який ви згадали нижче ... Ви коли-небудь це зрозуміли? Якщо так, не могли б ви відповісти на своє запитання?
Джон Осборн,

Відповіді:


59

Здається, в ASP.NET Core 2.2 відбулася зміна (і я не можу знайти жодних повідомлень про цю зміну). Якщо ви явно не працюєте в середовищі "Розробка", тоді Razor Views компілюються, і ви не побачите жодних змін, внесених до .cshtml

Однак ви можете вимкнути це, використовуючи деякі конфігурації у класі запуску, як описано нижче.

services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = true);

Для ASP.NET ядра 3.0 і вище, див Олександра Христового в відповідь .


2
Дякую. Однак, схоже, коли я вмикаю це, вношу зміни в html, а потім оновлюю, я отримую такий виняток: MissingMethodException: Method not found: 'Microsoft.Cci.IMethodReference Microsoft.Cci.ICustomAttribute.Constructor(Microsoft.CodeAnalysis.Emit.EmitContext)'. Microsoft.CodeAnalysis.CSharp.Symbol.Microsoft.CodeAnalysis.ISymbol.GetAttributes() Будь-яка ідея щодо того, що означає цей виняток? Усі інші сторінки завантажуються нормально. Лише під час редагування файлу та оновлення я отримую цю помилку
kevskree

3
Це спрацювало для мене. Щоб встановити його залежно від середовища, додайте IHostingEnvironment до методу запуску та зберігайте властивість. Тоді використовуйте щось на кшталтservices.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment("MyEnvironment"));
KuriosCurious

1
дякую, це спрацювало. Однак я думаю, що досить незручно і безглуздо, що Microsoft офіційно не оголошує про такі великі зміни.
Code_Worm

@kevskree те саме відбувається зі мною
JohnOsborne

1
@Mayank Gupta: див. Відповідь Олександра Крістова нижче ( stackoverflow.com/a/57637903/198990 ). Його відповідь спрацювала для мене (3.1).
Шандор Дрієнхуйзен,

208

У ASP.NET 3.0 ядра і вище , RazorViewEngineOptions.AllowRecompilingViewsOnFileChangeнемає.

Здивований, що оновлення подання під час роботи програми не спрацювало, я виявив таке рішення:

  1. Додайте до проекту пакет Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet
  2. Додайте таке Startup.cs:

    services.AddControllersWithViews (). AddRazorRuntimeCompilation () ;

Ось повне пояснення допитливих ...

HTH


1
Це не спрацювало для мене з будь-якої причини. Я працюю на Mac, якщо це має значення.
Накуль Тірувілуамала

@Nakul, що таке основна версія .net, якою ви користуєтесь?
Олександр Христов

Коли я використав цю команду: ls /usr/local/share/dotnet/shared/Microsoft.NETCore.App/, мабуть, отримав дві відповіді: 2.1.13 та 3.0.0
Накуль Тірувілуамала,

7
Для мене це чудово працювало на Mac та ASP.NET Core 3.1.
user3071284

4
Thx для цього підказки; працював у мене на .Net Core 3.1.2
jawa

50

Я щойно створив новий проект, використовуючи найновіший шаблон ASP.NET MVC Core 3.1, і змінив наступне, щоб увімкнути перекомпіляцію середовища виконання для налагодження:

Довідковий пакет NuGet - Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation .

Startup.cs - ConfigureServices (IServiceCollection services) БУДЕ:

// stuff...

services.AddControllersWithViews();

// more stuff...

ЗАРАЗ:

// stuff...

var mvcBuilder = services.AddControllersWithViews();

#if DEBUG
    mvcBuilder.AddRazorRuntimeCompilation();
#endif

// more stuff...

1
Це найкраща відповідь без прочитання статті, опублікованої Алексом, яку варто прочитати.
Варагі

9

Вам слід просто додати це:

services.AddControllersWithViews();

до ConfigureService методу .

Зверніть увагу, що наведений нижче код недоступний у ASP.NET Core 3.1:

services.AddControllersWithViews().AddRazorRuntimeCompilation();

6
Вам потрібно встановити nuget-пакет, щоб він працював Microsoft.AspNetCore.Mvc.Razor.Runtime
Mayank Gupta

4

Нижче мені допомогло, коли погляди були в окремому проекті.

if(HostingEnvironment.IsDevelopment()){ // only in development (optional)
    services.AddMvc().AddRazorOptions(o => {
        o.FileProviders.Add(new PhysicalFileProvider(PATH_TO_PROJECT));
    });
}

Це єдина відповідь, яка спрацювала у мене під час роботи з бібліотеками класу Razor. На здоров’я!
Sipke Schoorstra

3

За допомогою запущеної програми .net core 2.2 із командою dotnet watch runпроект перезапускається після кожної зміни




0

Існує два шляхи вирішення цієї проблеми:

1 . Перевірте дозволи папки, у якій присутній ваш файл .sln. Можливо, проблема з дозволами на доступ до файлів, оскільки Visual studio може не мати доступу до файлів, коли працює експрес-сервер IIS, тому для відображення нових змін .cshtml кожного разу, коли вам потрібно перезапустіть сервер, тому я пропоную змінити дозволи на доступ до папки:

Клацніть правою кнопкою миші на папці-> властивості-> безпека-> натисніть кнопку редагування -> перевірте всі параметри-> зберегти .

Перезапустіть Visual studio, щоб побачити зміни.

Якщо це не працює, використовуйте 2 варіанти.

2. У своєму проекті у файлі startup.cs додайте наступний рядок ConfigureServices () у методі:

services.AddMvc (). AddRazorOptions (options => options.AllowRecompilingViewsOnFileChange = true);

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.