Xml Azure Devops中的IIS Web App部署未正确转换.netcore项目的Web.config

Xml Azure Devops中的IIS Web App部署未正确转换.netcore项目的Web.config,xml,asp.net-core,deployment,azure-devops,Xml,Asp.net Core,Deployment,Azure Devops,我在AzureDevops中定义了一个版本,用于将我的aspnet核心应用程序部署到本地IIS服务器。它成功复制了所有文件,但无法正确转换webconfig文件。但是,当我使用VS webdeploy和相同的web.release.config发布应用程序时,它会正确地转换web.config 我选中了“文件转换和变量替换选项”下的“XML转换”和“XML变量替换”复选框 azuredevops部署生成的最后一个web.config具有与我使用的“xdt:Transform=Insert”重复的

我在AzureDevops中定义了一个版本,用于将我的aspnet核心应用程序部署到本地IIS服务器。它成功复制了所有文件,但无法正确转换webconfig文件。但是,当我使用VS webdeploy和相同的web.release.config发布应用程序时,它会正确地转换web.config

我选中了“文件转换和变量替换选项”下的“XML转换”和“XML变量替换”复选框

azuredevops部署生成的最后一个web.config具有与我使用的“xdt:Transform=Insert”重复的xml元素,并且它缺少“environmentVariable”的xml元素

这是我的转换文件:

<?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>

我测试了你的yaml管道。当我检查Vsbuild任务的构建日志时,我发现web.config被自动创建并应用了转换。当我下载构建工件并检查web.config文件时,该文件已正确转换。没有重复元素,也没有缺失元素

您遇到的重复xml元素是因为如果在发布管道中启用了
xml转换
,那么由Vsbuild任务转换的web.config将再次转换,从而导致重复。()

可能的修复方法是禁用发布管道的
XML转换
,因为转换是由vsbuild任务完成的


或者,您可以向msbuild参数添加一个标志
/p:IsTransformMWebConfigDisabled=true
,以防止Vsbuild任务转换生成管道中的web.config文件。然后,您可以在发布管道中启用
XML转换。

确保
web.PROFILENAME.config
文件设置为
Content


那么,为什么它可以在Visual studio中与WebDeploy Publish配合使用,而在AZureDevops中却不起作用呢?还考虑到我的ASPNET核心项目中没有Web.CONFIG,它只是在发布时创建的。您在构建管道中使用的构建任务是用来构建应用程序的?它的配置是什么?我与您的yaml共享了azure-pipelines.ymlI测试,当Vsbuild任务构建解决方案时,它会自动生成一个web.config,并根据转换文件web.release.config进行正确转换。您不需要在发布管道中选中“XML转换”复选框。我更新了上面的答案。一切都很好,只是缺少环境变量。
<?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>
# 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'