Azure Pipeline YAML中排除.NET Core3.1 Azure Function项目失败求助
解决Azure Pipeline中VSBuild找不到解决方案的问题
你遇到的核心问题是错误地将项目文件的排除规则用在了解决方案文件的搜索变量里,VSBuild任务需要的是.sln文件的路径,而你在solution变量里混合了sln的搜索和csproj的排除模式,导致它找不到正确的解决方案文件。
具体修复步骤
1. 恢复solution变量的原始配置
首先把变量里的solution改回原来的样子,因为它的作用是定位到你的解决方案文件,而不是过滤项目:
variables: solution: '**/*.sln' buildPlatform: 'Any CPU' buildConfiguration: 'Debug'
2. 在VSBuild任务中添加项目排除参数
VSBuild基于MSBuild运行,我们可以通过/p:ExcludeProjects参数在构建时排除指定的Azure Function项目。修改你的VSBuild任务如下:
- 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" /p:ExcludeProjects="**/*Project.AzureFunction*.csproj"' platform: '$(buildPlatform)' configuration: '$(buildConfiguration)'
这个参数会告诉MSBuild在构建解决方案时,跳过匹配*Project.AzureFunction*.csproj的项目。
(可选)如果需要排除NuGet还原的项目
如果你不想让NuGet还原这个Azure Function项目的依赖,可以把原来的NuGetCommand@2任务替换为DotNetCoreCLI@2的restore命令,这样可以更精准地过滤项目:
- task: DotNetCoreCLI@2 displayName: 'Restore required NuGet packages' inputs: command: 'restore' projects: | **/*.csproj !**/*Project.AzureFunction*.csproj feedsToUse: 'select'
为什么原来的写法会失败?
你之前在solution变量里写的!**/*Project.AzureFunction*.csproj是针对项目文件的排除规则,但VSBuild任务拿着这个混合了sln和csproj的路径去搜索时,它只会找.sln文件,这个混合模式不符合它的搜索逻辑,所以才会报错Solution not found。
内容的提问来源于stack exchange,提问作者C1X
相关产品推荐
相关产品推荐

