我在从msbuild获取包以显示在build.artifactStagingDirectory
中时遇到问题。我的.yml
文件非常基本。几乎默认。
我不得不向NuGetCommand@2
任务添加一些属性,因为它找不到要安装的软件包。
无论我做什么,我似乎都拿不到包文件。我很好奇它是否与构建任务有关。我看到警告说,它无法从NuGet Restore中找到包,但我没想到它不会构建zip文件等等。当使用所有相同的开关在本地运行msbuild
时,它会按预期创建包文件。
以下是yml文件的重要部分。
- task: NuGetCommand@2
inputs:
restoreSolution: 'src/WebFormsProj/packages.config'
restoreDirectory: 'src/packages'
- task: VSBuild@1
inputs:
solution: '$(solution)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: PublishBuildArtifacts@1
我收到以下警告(每个包裹一个(:
Warning MSB3030: Could not copy the file "D:a1ssrcpackagesAjaxControlToolkit.4.1.60919lib40AjaxControlToolkit.dll" because it was not found.
Could not copy the file "D:DownloadsaspnetspellASPNetSpellASPNetSpell.dll" because it was not found.
我还有其他的网络应用程序可以完美地构建和创建包。不同的是,这是一个网络表单项目,而不是一个网络应用程序。任何想法都将不胜感激。
更新:
我的项目位于src
目录中。我注意到这些软件包安装在src/WebFormsProj/src/packages/
目录中,而不是src/packages
目录中。此后,我将restoreDirectory
目录更改为'$(Pipeline.Workspace)/src/packages'
目录。我仍然得到";未找到";尽管存在错误。
更新2:我再次发现软件包没有安装在它试图从中提取的目录中。所以我又改了一次。这一次取得了一些成功。我再次将还原目录更改为:$(build.sourceDirectory)srcpackages'
我还必须更新一个DLL,它指向下载目录,而不是源代码管理中项目的本地目录。
我仍然没有看到发布包正在创建,但我现在更接近了。
更新3
我终于能够将这些文件作为一个工件来获取了。我不得不将/p:OutDir="$(build.artifactStagingDirectory)"
添加到msBuildArgs
中,然后用PathtoPublish: $(build.artifactStagingDirectory)_PublishedWebsites
更新我的发布工件任务
下一步是应用转换。我仍然不明白为什么我没有从web应用程序中获得典型的zip文件。
您可以尝试将VSbuild任务的restoreNugetPackages
属性设置为true
。例如:
- task: VSBuild@1
inputs:
solution: '$(solution)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
restoreNugetPackages: true