【问题标题】:Azure DevOps build pipeline does not include all NuGet package content filesAzure DevOps 构建管道不包括所有 NuGet 包内容文件
【发布时间】:2020-06-10 11:17:34
【问题描述】:

我正忙于为 ASP.NET MVC 应用程序创建 Azure Devops 构建管道,但我一直在恢复一些 NuGet 包。

我决定将所有文件夹添加到 NuGet 包安装添加的 .gitignore 文件中。因为管道会在执行 NuGet 还原时重现此文件。

不幸的是,对于我安装的其中一个 NuGet 包,这不起作用:预期的文件未添加到我的工件中。

当我在 Visual Studio 中手动安装此包时,NuGet 将在 App_Plugins/uSync 文件夹中添加程序集和一些文件,但 Pipelines 中的 NuGet 还原步骤不会:它仅将程序集添加到最终工件中。 App_Plugins 文件丢失。

在构建管道的 YAML 表示下方:

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- 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
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'artifact'
    publishLocation: 'Container'

非常感谢任何帮助!

【问题讨论】:

  • 对于packages.configrestoreinstall 是有区别的。当您install时,允许修改项目,包括将文件从包中复制到项目文件夹中。使用restore,NuGet 不会修改项目,它只会下载nupkg 并解压缩packages 文件夹中的zip。 install 仅适用于 Visual Studio,因为 NuGet 要求 Visual Studio 的项目系统修改项目文件(csprojvbproj 等)。因此,只要您继续使用packages.config,就需要签入这些文件。
  • 啊,有道理!有没有办法在管道中执行此操作而不是签入所需的文件?而且..根据您的解释,我希望这种行为适用于我的所有 NuGet 包,但我的一些包已正确添加到工件:程序集和解决方案文件中。
  • 如果你在安装一个新包后查看你的项目文件 (csproj)(如果你使用源代码控制系统,你可以查看 diff),你会看到它得到一个 @987654333 @ 指向解决方案包文件夹中程序集的元素。因此,NuGet 不会将任何内容还原到您的项目中,它只会还原到包文件夹中。该项目配置为使用包文件夹中的这些文件。你可以自己试试。 git clean 删除所有 binpackages 文件夹。在本地执行 NuGet 还原。查看仍然没有bin 文件夹。
  • 虽然您希望在恢复时将包内容文件复制到项目目录中,但内容文件通常用于填充配置文件默认值,然后对其进行修改(内容或名称已更改、删除, 等等)。如果 NuGet restore 重新创建它们,这些修改将丢失。因此,虽然它可以在您的用例中工作,但在其他用例中确实存在问题。另外,对于非 SDK 风格的项目,需要将 csproj 修改为具有<Content Include="filename.ext" />。 NuGet 不知道怎么做,但是在 VS 中安装时,NuGet 会告诉 VS 去做。
  • 由于这些原因,ASP.NET Core 项目不再通过 NuGet 包引入 Web 开发资产(js、css)。建议使用 npm 或 libman。我不再做 web 开发,所以我不知道将这些工具集成到非核心 ASP.NET 项目中是多么容易。

标签: azure nuget azure-pipelines


【解决方案1】:

只是好奇,您的构建管道中使用的是什么 NuGet 版本。根据doc,此版本的 NuGet 任务默认使用 NuGet 4.1.0。要选择不同版本的 NuGet,请使用 Tool Installer

【讨论】:

  • 我没有指定具体的版本号。版本号重要吗?
  • 您可以执行一个简单的测试。在您的开发工作站中从命令行(VS 外部)运行nuget.exe,查看是否在packages 文件夹下为packages.config 文件中指定的所有包提取了所有必要的文件。比较 DevOps 还原任务中的行为。如果行为有差异,那么值得考虑在 DevOps YAML 文件中升级 nuget.exe 版本。希望这会有所帮助。
猜你喜欢
  • 2020-01-09
  • 2021-12-28
  • 1970-01-01
  • 2020-03-31
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多