.NET Core MVCページが変更後に更新されない


111

最新バージョン2.2で.NET Core MVCを構築しています。CSHTMLファイルを変更してページを更新すると問題が発生します。変更がブラウザに反映されません。変更を確認するには、プロジェクトを再起動する必要があります。これはしばらくの間起こっているので、どのような変更がこの問題を引き起こしたのか正確にはわかりません。

私は、Chromeの「空のキャッシュとハードリロード」だけでなく、他のブラウザを使用してみましたが、役に立ちませんでした。これは、WindowsとMacで、Visual Studio for MacとVS Codeの両方を使用して発生します。

デフォルトの.Net Coreプロジェクトでは問題なく機能するので、プロジェクトの途中で変更されたものでなければなりません。この問題をデバッグするためにどこから始めればよいのでしょうか。私は私の中でほとんどすべてをコメントアウトしようとしましたが、解決策はStartup.csありProgram.csませんでした。


以下で言及したのと同じMissingMethodExceptionが発生しました...理解したことはありますか?もしそうなら、あなたの質問に答えてもらえますか?
JohnOsborne

回答:


59

ASP.NET Core 2.2で変更が行われたようです(この変更に関するアナウンスはありません)。「開発」環境で明示的に実行していない場合、Razorビューがコンパイルされ、.cshtmlに加えられた変更は表示されません。

ただし、次のように、Startupクラスの設定を使用してこれをオフにすることができます。

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

ASP.NET Core 3.0以降については、Alexander Christovの回答を参照してください。


1
ありがとうございました。ただし、これを有効にして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をStartupメソッドに追加し、プロパティに永続化します。次に、次のようなものを使用しますservices.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment("MyEnvironment"));
KuriosCurious

1
おかげでうまくいきました。しかし、マイクロソフトがこのような大きな変更を正式に発表しないのはかなり厄介で愚かなことだと思います。
Code_Worm

@kevskree同じことが私に起こっています
JohnOsborne

1
@Mayank Gupta:以下のAlexander Christovの回答を参照してください(stackoverflow.com/a/57637903/198990)。彼の答えは私のために働いた(3.1)。
SandorDrieënhuizen

202

ASP.NETコア3.0と高くRazorViewEngineOptions.AllowRecompilingViewsOnFileChange利用できません。

アプリの実行中にビューを更新しても機能しないことに驚いたので、次の解決策を見つけました。

  1. Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGetパッケージをプロジェクトに 追加します
  2. に以下を追加しますStartup.cs

    services.AddControllersWithViews()。AddRazorRuntimeCompilation() ;

好奇心が強い人のための完全な説明はここにあります...

HTH


1
どういうわけか私にとってこれはうまくいきませんでした。それが違いを生むなら、私はMacを使っています。
Nakul Tiruviluamala

@Nakul使用する.netコアバージョンは何ですか?
Alexander Christov

私がこのコマンドを使用したとき:ls /usr/local/share/dotnet/shared/Microsoft.NETCore.App/どうやら2つの答えを得たようです:2.1.13と3.0.0
Nakul Tiruviluamala

7
これは、MacとASP.NET Core 3.1でうまく機能しました。
user3071284

4
このヒントのThx。.Net Core 3.1.2で私のために働いた
jawa

49

最新のASP.NET MVC Core 3.1テンプレートを使用して新しいプロジェクトを作成しました。以下を変更して、デバッグ用にランタイム再コンパイルを有効にしました。

参考NuGetパッケージ- Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

Startup.cs-ConfigureServices(IServiceCollection services)WAS:

// stuff...

services.AddControllersWithViews();

// more stuff...

今:

// stuff...

var mvcBuilder = services.AddControllersWithViews();

#if DEBUG
    mvcBuilder.AddRazorRuntimeCompilation();
#endif

// more stuff...

1
これは、Alexが投稿した記事を読まない場合のベストアンサーです。
ワラギ

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コア2.2を実行しているアプリを使用するとdotnet watch run、変更のたびにプロジェクトが再起動されます


1

Riderでこの問題を解決するには、ASPNETCORE_ENVIRONMENT=Development環境変数を追加しました。



0

この問題を解決するには2つの方法があります。

。.slnファイルが存在するフォルダーの権限を確認します。IISExpressサーバーの実行中にVisual Studioがファイルにアクセスできない場合があるため、ファイルアクセス権限に問題がある可能性があります。サーバーを再起動するため、次の方法でフォルダーのアクセス許可を編集することをお勧めします。

フォルダを右クリック->プロパティ->セキュリティ->編集ボタンをクリック->すべてのオプションをチェック->保存

Visual Studioを再起動して変更を確認します。

これが機能しない場合は、2つのオプションを使用します。

2 .INでプロジェクトstartup.csのファイルは、ラインの下にこれを追加しConfigureServices()メソッドで:

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.