我的项目是.NET Framework 4.8,项目是SDK风格。 web.config 是为 ASP.NET Web 应用程序(基本上是 MVC)创建的基本配置。我创建了一个发布到文件夹的发布配置文件。
当我发布项目时,发布文件夹中的 web.config 现在包含 .NET Core 条目。具体来说,该过程添加了以下内容:
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\myApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
我很难相信这种情况正在发生(而不是我所做的事情的结果),所以我通过以下步骤复制了它:
为什么会出现这种情况?我该如何防止这种情况发生?如果项目不是 SDK 风格,则不会发生这种情况。
附注使用最新的 Visual Studio 2022。
发生这种情况是因为您的项目正在使用新的 SDK 样式项目格式(当您升级时),这对于 .NET Core 项目很常见,但 .NET Framework 项目也可以使用它来利用一些较新的功能。当您发布 SDK 样式的项目时,.NET CLI 工具会自动生成一个 web.config 文件,其中包含在 IIS 上托管 ASP.NET Core 应用程序所需的设置,包括 aspNetCore 处理程序和模块设置。这是 ASP.NET Core 项目的预期行为,但在 .NET Framework 项目中看到时可能会令人惊讶。 为了防止这种情况发生,您可以:
您可以在此处阅读有关这些内容的更多信息:https://learn.microsoft.com/en-us/dotnet/standard/frameworks
应用程序或库可以针对 .NET Standard 的某个版本。 .NET 标准版本代表所有 .NET 实现中的标准化 API 集。 例如,库可以以 .NET Standard 1.6 为目标,并使用相同的代码库访问跨 .NET Core 和 .NET Framework 运行的 API。
您的另一个解决方案是考虑恢复 .NET Framework 项目的旧式项目格式,以完全避免此问题。