我有一个简单的API项目,我可以把它推到ElasticBean秸秆上,然后在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>在发布此标记时,将转换aspNetCore标记,替换LAUNCHER_PATH & LAUNCHER_ARGS占位符,并将hostingModel="InProcess"添加(.csproj设置为<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>)如下:
<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_PATH和LAUNCHER_ARGS中,没有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中不起作用,这一事实使我感到困惑。什么能使发布不改变web.config?
我应该注意,工作的项目在发布任务中设置了projects: '**/*.sln',但是在其他项目上设置它并不能解决问题(我看了生成的工件)。
发布于 2019-09-03 08:41:43
.Net Core2.2 web.config在Azure DevOps上发布时不会转换LAUNCHER_PATH或LAUNCHER_ARGS
当在发布任务中设置**/*.sln时,我无法完全复制您的问题,得到了不同的结果。但是如果在发布任务中指定项目文件而不是解决方案文件,比如<SolutionName>/**/*.csproj。我可以得到和我在当地发表的结果相同的结果:
- task: DotNetCoreCLI@2
displayName: Publish
inputs:
command: publish
publishWebProjects: false
projects: '<SolutionName>/**/*.csproj'
arguments: '--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory)'
zipAfterPublish: True然后我可以得到两个.zip文件,并解压缩它们,我可以找到web.config转换:
<?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>希望这能有所帮助。
https://stackoverflow.com/questions/57759167
复制相似问题