为什么我的 ASP.NET 网站项目以 .NET Framework 4.6.1 为目标,而我已经告诉它以 4.8 为目标?

Why is my ASP.NET Web Site project targeting .NET Framework 4.6.1 when I have told it to target 4.8?

我们有一个大型 Visual Studio 2015 解决方案,其中包含多个网站(相对于 Web Application)项目和数十个业务逻辑 DLL 项目。我们的目标是 .NET Framework 4.6.1,但我现在已经在我的本地 PC 上安装了 Visual Studio 2019,并将所有项目重新定位到 4.8

当我使用我们现有的 PowerShell/MSBuild 脚本构建解决方案时,所有 DLL 都成功构建,但是当涉及到我们的第一个网站项目时,我收到以下错误:

C:\[omitted]_MyWebSite.metaproj : warning MSB3274: The primary reference "C:\[omitted]\MyDLL.dll" could not be resolved because it was built against the ".NETFramework,Version=v4.8" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v4.6.1".

然后,当编译器在站点上找到一些尝试使用 DLL 的代码时:

c:\[omitted]MyController.cs(6): error CS0246: The type or namespace name 'MyDLL' could not be found (are you missing a using directive or an assembly reference?) [C:\[omitted]_MyWebSite.metaproj]

(这只是一个示例引用错误。事实上,所有 DLL 似乎在网站项目中的任何地方都遇到了这个问题。)

站点 web.config 文件中的相关行:

  <location path="." inheritInChildApplications="false">
    <system.web>
    [omitted]
      <httpRuntime targetFramework="4.8" requestValidationMode="2.0" maxRequestLength="10240" />
      <compilation debug="true" strict="false" explicit="true" targetFramework="4.8">

我正在使用以下 MSBuild.exe 路径:

C:\Program Files (x86)\Microsoft Visual Studio19\Professional\MSBuild\Current\Bin\msbuild.exe -maxcpucount:1 -verbosity:detailed

似乎无法更新网站项目的 web.config 文件。您还必须更新 属性 页面中的目标。因此,在解决方案资源管理器中,找到您的网站项目,右键单击 > 属性 页面 > 构建 > 目标框架 > 更改为 .NET Framework 4.8。

这独立于 web.config 文件并导致我的 .sln 文件发生变化:

ProjectSection(WebsiteProperties) = preProject
[...omitted...]
TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.6.1"

至:

ProjectSection(WebsiteProperties) = preProject
[...omitted...]
TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.8"