Какой из определенных в файле launchSettings.json профилей Visual Studio использует во время публикации? - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь настроить профиль публикации проекта 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-->

1 Ответ

1 голос
/ 08 апреля 2019

Файл launchSettings.json используется Visual Studio только во время отладки и при запуске приложения через dotnet run.Он не используется вообще или даже не учитывается при публикации.Если вы хотите указать конкретную среду при публикации, вам нужно добавить add <EnvironmentName>Staging</EnvironmentName> в файл pubxml:

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

Это приведет к добавлению объявления переменной среды для ASPNETCORE_ENVIRONMENT установить в Staging в опубликованном файле web.config.

Однако это предполагает несколько вещей:

  1. То, что вы используете IIS для размещения.Только IIS заботится о файле web.config, поэтому, если вы размещаете на другом веб-сервере, вам, очевидно, понадобится другая стратегия.
  2. То, что вы хотите привязать опубликованное приложение к определенной средена первом месте.Одна из приятных сторон приложений ASP.NET Core заключается в том, что они не созданы для конкретной среды, как это было в случае приложений ASP.NET.Вы можете взять тот же опубликованный код и удалить его в любой среде.Среду затем можно установить с помощью переменной среды ASPNETCORE_ENVIRONMEMT на сервере (т. Е. Установить ее как Staging для промежуточного сервера, и тогда любое опубликованное там приложение будет автоматически использовать среду Staging. Или это может бытьесли вы используете Azure, задайте его с помощью настройки приложения. В любом случае вы извлекаете пользу из абстракции окружения от фактического кода публикации, что позволяет выполнять конвейер CI / CD без необходимости постоянной публикации.
...