繁体   English   中英

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

[英]Which of defined in launchSettings.json profiles Visual Studio uses during publication?

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

这会导致几个问题:

  1. 尽管docs.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>

launchSettings.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-->

仅在调试期间以及通过dotnet run运行应用程序时,Visual Studio才会使用launchSettings.json文件。 发布时根本不使用它,甚至不考虑使用它。 如果要在发布时指定特定的环境,则需要在pubxml文件中添加添加<EnvironmentName>Staging</EnvironmentName>

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

这将对在已发布的web.config ASPNETCORE_ENVIRONMENT的环境变量声明添加为“ Staging ”产生影响。

但是,这假定了以下几点:

  1. 您正在使用IIS进行托管。 只有IIS关心web.config文件,因此,如果您使用其他Web服务器托管,显然需要其他策略。
  2. 首先要真正将发布的应用程序绑定到特定的环境。 ASP.NET Core应用程序的优点之一是它们不是针对特定环境而构建的,例如ASP.NET应用程序就是这种情况。 您可以采用相同的已发布代码,并将其放在任何环境中。 环境的话,可以用设置ASPNETCORE_ENVIRONMEMT服务器上的环境变量(即设置为Staging的临时服务器,然后所有的应用程序发布的还有将自动使用Staging环境,或者,它可以与一个应用程序的设置,如果被设置无论哪种情况,您都可以从实际的发布代码中抽象出环境,从而无需连续发布即可创建CI / CD管道,从而从中受益。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM