C# .Net Core 2.2 web.config赢得';t在Azure DevOps中发布时转换启动器路径或启动器参数

C# .Net Core 2.2 web.config赢得';t在Azure DevOps中发布时转换启动器路径或启动器参数,c#,.net-core,azure-devops,web-config,csproj,C#,.net Core,Azure Devops,Web Config,Csproj,我有一个简单的API项目,我可以将它推送到Elastic Beanstalk,并在IIS上运行而不会遇到麻烦。Web.Config(相当标准)如下所示: <?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*

我有一个简单的API项目,我可以将它推送到Elastic Beanstalk,并在IIS上运行而不会遇到麻烦。Web.Config(相当标准)如下所示:

<?xml version="1.0" encoding="utf-8"?> 
<configuration>   
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
      </aspNetCore>   
    </system.webServer>
</configuration>
我有另一个项目,其中有完全相同的web.config文件,当我手动发布(本地)时,它会转换,但当它通过Azure DevOps发布时,它不会转换。两种解决方案中的YML都是相同的(并且都使用
CreateDefaultBuilder
),但是在第二个项目中,web.config在发布时不会被转换,它会保留
LAUNCHER\u路径
LAUNCHER\u参数
和无
hostingModel

- task: DotNetCoreCLI@2
  displayName: Publish
  inputs:
    command: publish
    publishWebProjects: False
    arguments: '--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory)'
    zipAfterPublish: True
注意:
$(BuildConfiguration)
在两个项目(版本)中是相同的

我可以硬编码web.config,这样它就不需要转换,但我想知道如何正确地解决这个问题(特别是当我们以后可能想将它部署到linux容器时)。我已经检查过,并且.csproj文件具有相同的设置(和软件包版本),我看不到这两个项目之间有什么不同(因此我想我遗漏了一些东西),除了web.config所在的位置:

有效的项目:

[SolutionDirectory]\[ProjectDirectory]\web.config
不起作用的项目:

[SolutionDirectory]\src\[ProjectDirectory]\web.config
它在本地有效,但在DevOps中不起作用这一事实让我感到困惑。是什么导致publish无法转换web.config

我应该注意到,在发布任务中,确实有效的项目设置了
projects:'***.sln'
,但是在另一个项目上设置它并不能解决问题(我查看了生成的工件)

.Net Core 2.2 web.config在Azure DevOps中发布时不会转换LAUNCHER_路径或LAUNCHER_参数

在发布任务中设置
***.sln
时,我无法完全重现您的问题,我得到了不同的结果。但是,如果在发布任务中指定项目文件而不是解决方案文件,如
/***.csproj
。我可以得到与我在本地发布的结果相同的结果:

- task: DotNetCoreCLI@2
  displayName: Publish
  inputs:
    command: publish
    publishWebProjects: false
    projects: '<SolutionName>/**/*.csproj'
    arguments: '--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory)'
    zipAfterPublish: True

希望这会有所帮助。

您是否查看了不工作项目的发布任务日志?日志是否显示您的API项目已发布?另外,请尝试将日志中的
***.sln
更改为
***.csproj
没有任何提示。使用.csproj使其工作。不知道为什么。有机会的话,我会试试具体的csproj。我不能使用通配符,因为解决方案中有多个项目。但是,这不是sln的问题-它没有什么不同。今天找到机会重新讨论这个问题-您关于设置CS项目的建议解决了这个问题<代码>项目:'**/xxxxxxxxxxxxx.Api.csproj'成功了!你知道为什么这在一个解决方案中是一个问题而在另一个解决方案中不是一个问题吗?
- task: DotNetCoreCLI@2
  displayName: Publish
  inputs:
    command: publish
    publishWebProjects: false
    projects: '<SolutionName>/**/*.csproj'
    arguments: '--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory)'
    zipAfterPublish: True
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\WebAppTransform.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" hostingModel="InProcess"></aspNetCore>
  </system.webServer>

</configuration>