Visual Studio 在发布过程中使用 launchSettings.json 配置文件中定义的哪一个?

2024-02-28

我正在尝试配置 ASP.NET Core 项目发布配置文件以部署到临时环境。服务器上设置了预配置的 ASPNETCORE_ENVIRONMENT 变量,但无论我尝试什么,Visual Studio 都会不断将 ASPNETCORE_ENVIRONMENT 变量定义添加到发布 web.config 文件中。消除它的唯一方法是从 launchSettings.json 中删除。

这会导致几个问题:

  1. 尽管 learn.microsoft.com 说这个选项应该完全 覆盖环境变量,实际上是 HostingEnvironment.EnvironmentName 属性设置为 “Staging;Environment”,环境变量和 web.config 设置的串联值。
  2. 结果阻止了适当的 appsettings.{environment}.json 加载并破坏所有环境感知逻辑。
  3. 我更愿意将 ASPNETCORE_ENVIRONMENT 保留在 launchSettings.json 中以进行调试。

我找不到任何控制此行为的设置。有没有?

这是我的 .pubxml

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>MSDeploy</WebPublishMethod>
    <LastUsedBuildConfiguration>Release.Main</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
    <ProjectGuid>433bb565-5e85-4f1a-9dd4-a7f437fdb534</ProjectGuid>
    <SelfContained>false</SelfContained>
    <_IsPortable>true</_IsPortable>
    <MSDeployServiceURL>http://192.168.0.22</MSDeployServiceURL>
    <DeployIisAppPath>auth/main</DeployIisAppPath>
    <RemoteSitePhysicalPath />
    <SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
    <MSDeployPublishMethod>RemoteAgent</MSDeployPublishMethod>
    <EnableMSDeployBackup>True</EnableMSDeployBackup>
    <_SavePWD>False</_SavePWD>
  </PropertyGroup>
</Project>

启动设置.json

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iis": {
      "applicationUrl": "https://localhost/DocShellWeb.Sts",
      "sslPort": 0
    }
  },
  "profiles": {
    "DocShellWeb.Sts": {
      "commandName": "IIS",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

部署的 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="..." arguments="..." stdoutLogEnabled="false" hostingModel="InProcess" stdoutLogFile=".\logs\stdout">
        <environmentVariables>
          <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>
<!--ProjectGuid: 706412a5-be0d-452d-a9b0-ce00d799f990-->

The launchSettings.json文件仅由 Visual Studio 在调试期间以及通过以下方式运行应用程序时使用dotnet run。发布时根本不使用它,甚至不考虑它。如果你想在发布的时候指定特定的环境,那么你需要添加add<EnvironmentName>Staging</EnvironmentName> to the pubxml file:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
      ...
      <EnvironmentName>Staging</EnvironmentName>
  </PropertyGroup>
</Project>

这将具有添加环境变量声明的效果ASPNETCORE_ENVIRONMENT set to Staging在您发布的 web.config 中。

然而,这假设了一些事情:

  1. 您正在使用 IIS 进行托管。只有 IIS 关心 web.config 文件,因此如果您使用不同的 Web 服务器托管,则显然需要不同的策略。
  2. 您首先希望将已发布的应用程序实际绑定到特定环境。 ASP.NET Core 应用程序的优点之一是它们不是为特定环境构建的,例如 ASP.NET 应用程序的情况。您可以采用相同的已发布代码并将其放入任何环境中。然后,可以使用以下命令设置环境ASPNETCORE_ENVIRONMEMT服务器上的环境变量(即将其设置为Staging对于临时服务器,然后在那里发布的任何应用程序都会自动使用Staging环境。或者,如果您使用的是 Azure,则可以使用应用程序设置进行设置。无论哪种情况,您都可以从实际发布代码中抽象环境中受益,从而允许您执行 CI/CD 管道,而无需不断发布。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual Studio 在发布过程中使用 launchSettings.json 配置文件中定义的哪一个? 的相关文章

随机推荐