Xml Azure Devops中的IIS Web App部署未正确转换.netcore项目的Web.config
我在AzureDevops中定义了一个版本,用于将我的aspnet核心应用程序部署到本地IIS服务器。它成功复制了所有文件,但无法正确转换webconfig文件。但是,当我使用VS webdeploy和相同的web.release.config发布应用程序时,它会正确地转换web.config 我选中了“文件转换和变量替换选项”下的“XML转换”和“XML变量替换”复选框 azuredevops部署生成的最后一个web.config具有与我使用的“xdt:Transform=Insert”重复的xml元素,并且它缺少“environmentVariable”的xml元素 这是我的转换文件: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”重复的
<?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'