我正在从 .NET 4.7 上的 ASP.NET 升级到 ASP.NET Core 8,并且我正在使用升级工具。我选择使用 YARP 作为反向代理并行增量升级。我现在在同一个解决方案中拥有旧的 dot-net 框架项目和新的 dot-net core 项目。
新框架不支持
@helper
razor 文件中的旧 .cshtml
,但支持最接近的等效项,如下所示:
隐式转换。
不幸的是,设计时 IDE 认为它仍在考虑旧的 razor 限制,因为它显示了如下图所示的波浪形错误标记。
前导
<span>
标记不被识别为从 C# 到 html 的隐式转换。您还可以在屏幕截图中看到显式转换标记 @:@{
也无法识别。
作为测试,我切换到我拥有的 ASP.NET Core 3.1 Web 应用程序,并将一个新函数插入到使用隐式转换的
@functions
块中,并且它没有抱怨。
升级工具显然没有配置 IDE 以使用 ASP.NET Core 8 的较新 Razor 功能。
有人有建议吗?
我相信我找到了解决方案。 我发现了有关 Microsoft.AspNetCore.Razor.Design 包的被忽略的警告,其中包含消息“检测到 Razor 语言版本降级”。
我调查并注意到父包 Microsoft.AspNetCore.Mvc 不是最新的,如下所示。
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
我升级到 2.3.0,发现代码中的错误指示器有所改善。我通过测试哪些转换指标有效、哪些无效而取得了进一步的进展,到目前为止(祈祷吧)它似乎有效。
你所做的还不够。 由于过时的包引用以及由此导致的 Razor 语言版本降级,您的 IDE 仍将您的 .cshtml 文件视为“旧”Razor (来自 ASP.NET 4.x 或 Core 2.x)。 1-升级 NuGet 包并删除旧的 Microsoft.AspNetCore.Razor.Design
如果您在包中看到此代码
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" />
Microsoft.AspNetCore.Razor.Design
软件包已被弃用,我的朋友
您应该使用与您的目标框架匹配的最新 ASP.NET Core 包 - 例如,如果您要升级到 .NET 8:
<TargetFramework>net8.0</TargetFramework>
这样做
<ItemGroup>
<!-- If you need MVC, or Razor runtime compilation, etc. -->
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="8.0.0-preview.*" />
...
</ItemGroup>
它处于预览阶段,所以我建议使用 dotnet 7 甚至 9
2-验证您的 SDK 和 Razor 语言版本
在您的 .csproj 中,顶部 标签通常使用 Web 或 Razor SDK:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
</Project>
如果您看到
3.清洁和重建
发生重大变化后的通常行动
1-关闭 Visual Studio(或您的 IDE)。
2-删除bin和obj文件夹。
3-重新打开并恢复包,然后重建项目。
4-验证是否不存在有关“Razor 语言版本降级”的警告。