首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Net Core2.2 web.config在Azure DevOps上发布时不会转换LAUNCHER_PATH或LAUNCHER_ARGS

.Net Core2.2 web.config在Azure DevOps上发布时不会转换LAUNCHER_PATH或LAUNCHER_ARGS
EN

Stack Overflow用户
提问于 2019-09-02 15:02:52
回答 1查看 1.7K关注 0票数 0

我有一个简单的API项目,我可以把它推到ElasticBean秸秆上,然后在IIS上运行,没有问题。Web.Config (相当标准),如下所示:

代码语言:javascript
复制
<?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>

在发布此标记时,将转换aspNetCore标记,替换LAUNCHER_PATH & LAUNCHER_ARGS占位符,并将hostingModel="InProcess"添加(.csproj设置为<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>)如下:

代码语言:javascript
复制
<aspNetCore processPath="dotnet" arguments=".\xxxxxxxx.Api.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" hostingModel="InProcess">

我有另一个项目,其中包含完全相同的web.config文件,当我手动发布(本地)时,它会进行转换,但当它通过Azure DevOps发布时就不会转换。这两种解决方案中的YML都是相同的(而且都使用CreateDefaultBuilder),但是在第二个项目中,web.config在发布时不会被转换,它保留在LAUNCHER_PATHLAUNCHER_ARGS中,没有hostingModel集。

代码语言:javascript
复制
- 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所在的位置之外,我看不到这两个项目之间有什么不同(所以我想我错过了什么):

有效的项目:

代码语言:javascript
复制
[SolutionDirectory]\[ProjectDirectory]\web.config

无法工作的项目:

代码语言:javascript
复制
[SolutionDirectory]\src\[ProjectDirectory]\web.config

它在本地工作,但在DevOps中不起作用,这一事实使我感到困惑。什么能使发布不改变web.config?

我应该注意,工作的项目在发布任务中设置了projects: '**/*.sln',但是在其他项目上设置它并不能解决问题(我看了生成的工件)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-03 08:41:43

.Net Core2.2 web.config在Azure DevOps上发布时不会转换LAUNCHER_PATH或LAUNCHER_ARGS

当在发布任务中设置**/*.sln时,我无法完全复制您的问题,得到了不同的结果。但是如果在发布任务中指定项目文件而不是解决方案文件,比如<SolutionName>/**/*.csproj。我可以得到和我在当地发表的结果相同的结果:

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

然后我可以得到两个.zip文件,并解压缩它们,我可以找到web.config转换:

代码语言:javascript
复制
<?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>

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57759167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档