Развертывание IIS Web App в Azure Devops неправильно преобразовывает файл web.config для проекта .netcore - PullRequest
0 голосов
/ 24 февраля 2020

Я определил выпуск в AzureDevops для развертывания моего основного приложения pnet на локальном сервере IIS. Он успешно копирует все файлы, но не может правильно преобразовать файл webconfig. Однако, когда я публикую sh приложение, использующее VS webdeploy с тем же web.release.config, оно корректно преобразует web.config.

Я установил флажок «XML преобразование» и «XML замена переменных» в разделе «Преобразования файлов и параметры замены переменных».

Окончательный файл web.config, созданный azuredevops развертывание, имеет дубликаты xml элементов для тех, которые я использовал "xdt: Transform = Insert", а также отсутствует элемент xml для "environmentVariable".

Вот файл преобразования, который у меня есть:

<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <modules xdt:Transform="Insert" runAllManagedModulesForAllRequests="false">
        <remove name="WebDAVModule" />
      </modules>
      <aspNetCore>
        <environmentVariables>
          <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" xdt:Locator="Match(name)" xdt:Transform="SetAttributes" />
        </environmentVariables>
      </aspNetCore>
      <staticContent xdt:Transform="Insert">
        <mimeMap fileExtension="mp3" mimeType="..." />
      </staticContent>
    </system.webServer>
  </location>
</configuration>

И вот результат 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=".\app.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" />
            <modules runAllManagedModulesForAllRequests="false">
                <remove name="WebDAVModule" />
            </modules>
            <staticContent>
                <mimeMap fileExtension="mp3" mimeType="..." />
            </staticContent>
            <modules runAllManagedModulesForAllRequests="false">
                <remove name="WebDAVModule" />
            </modules>
            <staticContent>
                <mimeMap fileExtension="mp3" mimeType="" />
            </staticContent>
        </system.webServer>
    </location>
</configuration>

My azure -pipelines.yml выглядит следующим образом:

# ASP.NET Core (.NET Framework)
# Build and test ASP.NET Core projects targeting the full .NET Framework.
# Add steps that publish symbols, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: VSTest@2
  inputs:
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Убедитесь, что для файла web.PROFILENAME.config установлено значение Content

{ ссылка }

0 голосов
/ 25 февраля 2020

Я проверил с вашим yaml конвейером. Когда я проверил журнал сборки задачи Vsbuild, я обнаружил, что файл web.config был создан автоматически, и применил преобразование. Когда я загрузил артефакты сборки и проверил файл web.config, файл был правильно преобразован. Без дублирующих элементов и отсутствующих элементов.

enter image description here

Дублированные элементы xml, с которыми вы столкнулись, связаны с тем, что если XML transformation включен в конвейере выпуска, файл web.config, преобразованный задачей Vsbuild, будет снова преобразован, что привело к дублированию. ()

Возможно исправить это, отключив XML transformation вашего конвейера выпуска, поскольку преобразование было выполнено с помощью задачи vsbuild.

Или вы можете добавить флаг /p:IsTransformWebConfigDisabled=true в аргументы msbuild чтобы задача Vsbuild не трансформировала файл web.config в конвейер сборки. Затем вы можете включить XML transformation в конвейере выпуска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...