iis 如何防止在使用Visual Studio 2019运行应用程序时在ASP.NET Core API 3.1中自动生成web.config?

piztneat  于 2023-02-04  发布在  .NET
关注(0)|答案(2)|浏览(142)

我正在开发的Asp.Net核心3.1 API,它的工作如预期。
当我运行它时,它会自动将原始的web. config转换为新的。

    • 原始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="dotnet" arguments=".\EngageAPI.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>
    • 新建Web.配置**
<?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="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
        <environmentVariables>
          <environmentVariable name="COMPLUS_ForceENC" value="1" />
          <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>

所以我有两个问题。
1.为什么会自动生成?
1.如何停止此自动生成?

    • 更新日期:**
    • 进一步澄清问题:**

为什么它会导致这个问题?我正在从azure dev ops进行部署。我所做的是将web. config从我的项目复制到我正在创建的包中。并注意到此web. config已修改为新的web. config(它具有%LAUNCHER_PATH %%LAUNCHER_ARGS %)。因此,基本上我们不需要复制此web.config。我们需要复制在发布文件夹中生成的文件。
CsProj文件

<PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="Models\" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="7.0.0" />
    <PackageReference Include="Dapper" Version="2.0.35" />
    <PackageReference Include="Microsoft.Azure.Storage.Blob" Version="11.1.7" />
    <PackageReference Include="Microsoft.Azure.Storage.Common" Version="11.1.7" />
    <PackageReference Include="Microsoft.Extensions.Logging.Log4Net.AspNetCore" Version="3.1.0" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.3" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="5.5.0" />
    <PackageReference Include="Swashbuckle.AspNetCore.Filters" Version="5.1.1" />
    <PackageReference Include="System.Data.SqlClient" Version="4.8.1" />
  </ItemGroup>

</Project>
cygmwpex

cygmwpex1#

看起来您在调试时使用的是IIS而不是IIS Express。
尝试将此添加到您的.csproj文件:

<ANCMPreConfiguredForIIS>true</ANCMPreConfiguredForIIS>

还要确保您的VS版本〉= VS 16.6.3
这个问题现在已经被websdk团队修复了:https://github.com/dotnet/websdk/issues/564#issuecomment-644199581

bis0qfac

bis0qfac2#

Visual Studio会根据您的launchsettings.json自动更新web.config文件。当您从IDE运行/debug或使用dotnet run时,它会这样做。因此,对于net6.0和VS2022,答案是修改您的启动设置配置文件,以便它停止更改您的文件。
下面是一个例子

"IIS Express": {
  "commandName": "IISExpress",
  "launchBrowser": true,      
  "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development"
  },
  "ancmHostingModel": "OutOfProcess"
},

processPath是自动计算的,但我相信您也可以指定自己的路径,也可以在这里设置进程托管模型。
也许您希望每个开发人员都有自己的launchsettings.json来适应他们的环境。
发布项目时,它将再次更改web.config。如果您知道此. csproj属性具有所有正确的设置,则可以禁用此行为

<IsWebConfigTransformDisabled>true</ IsWebConfigTransformDisabled>

可以在构建/发布时使用转换来控制web.config,但是当从VisualStudio(或dotnetrun)运行/调试时,它将始终基于launchsettings覆盖您的转换:)

相关问题