前陣子遇到一個 AddRazorRuntimeCompilation() 問題,靠 .NET 6 SDK 更新到 6.0.201 版解決,升級後繼續用 VSCode 開發、測試,一路順暢,感覺良好。

心血來潮,試改用 VS2022 偵錯,簡單的 Home/Index 檢視卻出現奇怪錯誤:

An unhandled exception occurred while processing the request.
InvalidOperationException: The view 'Index' was not found. The following locations were searched:
/Views/Home/Index.cshtml
/Views/Shared/Index.cshtml
Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.EnsureSuccessful(IEnumerable<string> originalLocations)

Stack Query Cookies Headers Routing
InvalidOperationException: The view 'Index' was not found. 
The following locations were searched: /Views/Home/Index.cshtml /Views/Shared/Index.cshtml
Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.EnsureSuccessful(IEnumerable<string> originalLocations)

為了對照,我新建一個空白 ASP.NET Core MVC 專案也是同樣狀況,確定 \Home\Index.cshtml 存在,dotnet run 網站能正確執行,用 VSCode 測試、偵錯也完全正常,由此斷定是 VS2022 有問題。

唯一的線索是 VS2022 編譯執行時出現以下警告:

Warning CS8032 An instance of analyzer Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator cannot be created from C:\Program Files\dotnet\sdk\6.0.201\Sdks\Microsoft.NET.Sdk.Razor\source-generators\Microsoft.NET.Sdk.Razor.SourceGenerators.dll: Could not load file or assembly 'Microsoft.CodeAnalysis, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. 系統找不到指定的檔案。

經過一番研究,學到 VS2022 新加入的 Channel 概念。

關於 Visual Studio Channels,這篇 Visual Studio Channels and Release Rhythm 有詳細介紹,簡言之,VS2022 除了依功能區分 Community、Professional、Enterprise 版,依發佈頻率、支援週期又區分為三個 Channel:

  • Preview - 包含最新功能、修正,方便早期測試與回饋意見建議開發方向
  • Current - 包含已成熟可推廣使用的功能,偶爾會包含一些預覽功能(Preview Feature)提供試用及蒐集回饋
  • LTSC - 適合求穩不求新的開發團隊,提供 18 個月技術支援

以 2022/3/28 為準,LTSC 版號為 17.0.7,Current 版則已更新到 17.1.2,而這次遇到的問題,與 Channel 有關。

以下是 .NET 6 SDK 6.0.201 發行資訊:

其中提到 .NET 6.0.201 需要 VS2022 17.1 以上版本,而我安裝的是 Visual Studio LTSC 最新版,版號只到 17.0.7,是問題所在。

因此,VS2022 LTSC 目前只支援到 .NET 6.0.103,VS2022 Current 才有支援 6.0.201。要切換 Channel 很簡單,從選單 Help / Check for Update 點 Change update settings:

選擇你想採用的 Update Channel,VS 將會下載安裝切換成不同 Channel:

文章開始提到的找不到 Index.cshtml 問題,在改用 Current Channel 後不藥而瘉。而我則學到一課 - 使用新版 .NET SDK,需注意 Visual Studio 支援版本。


Comments

Be the first to post a comment

Post a comment