首页 > 解决方案 > Visual Studio 2019 IIS 配置文件创建破坏 Azure 应用服务的 web.config 文件

问题描述

在 ASP.NET Core Web 3.1 项目上使用 Microsoft Visual Studio Community 2019 版本 16.6.3 创建新的调试配置文件时,web.config会创建一个文件。

在此处输入图像描述

该文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="C:\Users\<USER>\Source\Project\Project.Web\bin\Debug\netcoreapp3.1\Project.Web.exe" arguments="" stdoutLogEnabled="false" hostingModel="InProcess">
        <environmentVariables>
          <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>

使用 web.config 访问站点时出现错误:

AggregateException:发生一个或多个错误。(发生了一个或多个错误。(NPM 脚本“启动”退出,但未指示 create-react-app 服务器正在侦听请求。错误输出为:)) System.Threading.Tasks.Task.ThrowIfExceptional(bool includeTaskCanceledExceptions)

InvalidOperationException:NPM 脚本“启动”退出,但未指示 create-react-app 服务器正在侦听请求。错误输出是:Microsoft.AspNetCore.SpaServices.ReactDevelopmentServer.ReactDevelopmentServerMiddleware.StartCreateReactAppServerAsync(string sourcePath, string npmScriptName, ILogger logger)

标签: c#azureasp.net-coreweb-config

解决方案


我首先认为确切aspNetCore processPath是罪魁祸首,但考虑到错误,它更像是来自Startup.cs.

if (env.IsDevelopment())
{
    spa.UseReactDevelopmentServer(npmScript: "start");
}

查看部署的实际文件证实了我的怀疑,这里的路径是相对的。

在此处输入图像描述

我需要设置ASPNETCORE_ENVIRONMENTProduction. 通过创建一个新文件解决了这个问题,web.release.config因为我需要在实际的 IIS 上使用ASPNETCORE_ENVIRONMENTas测试应用程序Development。通过这种转换,一切正常:

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

  <!-- To customize the asp.net core module uncomment and edit the following section. 
  For more info see https://go.microsoft.com/fwlink/?linkid=838655 -->
  <!--
  <system.webServer>
    <handlers>
      <remove name="aspNetCore"/>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
  </system.webServer>
  -->

  <location>
    <system.webServer>
      <aspNetCore>
        <environmentVariables>
          <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" xdt:Locator="Match(name)" xdt:Transform="SetAttributes" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
  </location>

</configuration>

资源:

https://stackoverflow.com/a/54702411/3850405


推荐阅读