【问题标题】:Restore Libman JS Libraries in Azure DevOps Build Pipeline在 Azure DevOps Build Pipeline 中恢复 Libman JS 库
【发布时间】:2020-05-01 06:34:11
【问题描述】:

我已经建立了一个快乐的 Azure DevOps 构建管道,它在提交到分支时触发,然后恢复 Nuget 包,构建我的 Mvc.Core Web 应用程序并将其部署到 Azure 应用程序服务。

但是,LibMan 中引用的 JS 库不会还原并部署到 Azure。我怎样才能做到这一点?

我已经包含了 LibMan 构建包(我阅读了 would carry out the task automatically),但没有任何乐趣。

<PackageReference Include="Microsoft.Web.LibraryManager.Build" Version="2.0.96" />    

我真的需要在管道中添加一个 .net 核心自定义命令到install the LibraryManager Cli tool,然后将其调用到restore the JS libraries 吗?它似乎比我预期的要复杂,而且我没有在网上找到任何人这样做的例子。

将 JS 库包含在源代码管理中的另一种方法是什么?如果可能的话,我确实想避免这种情况,但如果这是标准方法,那么我想我很乐意这样做。

非常感谢任何建议或 YAML 示例以在 Azure DevOps 中实现此目标。

【问题讨论】:

  • 你能分享你的管道吗?
  • @mesies 我可以做,但是一切正常。据我所知,没有什么可以恢复 LibMan 库。

标签: c# azure .net-core azure-devops libman


【解决方案1】:

在我们的案例中,恢复 LibMan JS 库的问题原来是另一个开发人员几个月前添加的项目文件设置,当时他们遇到了构建时间缓慢的问题,as mentioned here

 <PropertyGroup>
    <LibraryRestore>false</LibraryRestore>
  </PropertyGroup>

一旦我找到并删除了这个设置,不出所料,LibMan 恢复工作完美,而且构建时间也没有特别慢。

我想理想的情况不是尝试在每个构建上进行 LibMan 恢复,而是在开发人员机器上手动进行,然后作为 DevOps 构建管道中的特定步骤?但无论如何,现在一切正常。

【讨论】:

  • 有一个打开的issue on GitHub regarding the slowness。对我来说,还原需要不到一秒钟的时间,但我仍在考虑为 Debug 构建禁用它。 &lt;LibraryRestore Condition="'$(Configuration)' == 'Debug'"&gt;false&lt;/LibraryRestore&gt;
【解决方案2】:

在 Azure DevOps Build Pipeline 中恢复 Libman JS 库

您无需在管道中添加 .net core 自定义命令即可恢复 JS 库。

我创建了一个示例来测试 LibMan 构建包,它在 Azure devops 上运行良好。

要使用 LibMan 构建包,首先,您需要在项目中设置正确的 libman.json 和其中的 JS 库,例如:

{
  "version": "1.0",
  "defaultProvider": "cdnjs",
  "libraries": [
    {
      "provider": "cdnjs",
      "library": "jquery@3.2.1",
      "destination": "wwwroot/lib/jquery",
      "files": [
        "jquery.min.js",
        "jquery.js",
        "jquery.min.map"
      ]


    }
  ]
}

那是因为LibMan 包会恢复基于libman.json 的JS 库。您将在LibMan 构建包的microsoft.web.librarymanager.build.targets 中找到以下目标:

<Target Name="LibraryManagerRestore" Condition="'$(LibraryRestore)' != 'False'">

    <Microsoft.Web.LibraryManager.Build.RestoreTask
        FileName="libman.json"
        ProjectDirectory="$(MSBuildProjectDirectory)"
        ProviderAssemblies="$(LibraryProviderAssemblies)">

        <Output TaskParameter="FilesWritten" ItemName="_FilesWritten"/>
    </Microsoft.Web.LibraryManager.Build.RestoreTask>

    <ItemGroup>
        <FilesForPackagingFromProject  Include="%(_FilesWritten.Identity)">
            <DestinationRelativePath>%(_FilesWritten.Identity)</DestinationRelativePath>
        </FilesForPackagingFromProject>
    </ItemGroup>
</Target>

这个 .targets 只会在构建过程中被 MSBuild 解析,

所以,其次,当您构建您的项目而不是恢复包时,这些 JS 库将被恢复。

作为测试,我从我的仓库中删除了JS libraries

然后在dotnet构建完成后,我可以在文件夹wwwroot/lib/jquery中获得JS libraries

如果仍然无法解决您的问题,请确保您可以在没有 Azure Devops 从 Visual Studio 构建时恢复 JS 库。

顺便说一句,您还可以使用任务 Libman (Preview) 而不是 MSBuild 来恢复 libman.json 中定义的包。

希望这会有所帮助。

【讨论】:

  • 非常感谢您提供的所有详细建议。我会将您的回复标记为答案,因为它包含比我对实际问题的解释更有用的信息!我试图在 Azure DevOps 中找到 Libman (Preview) 任务,但在任何地方都看不到它。如何将它添加到我的构建管道?我确实找到了这个第三方插件,但我认为这不是“官方”任务:marketplace.visualstudio.com/items?itemName=Liero.Libman
  • 要获得 Restore on Build 功能,您需要引用 Microsoft.Web.LibraryManager.Build NuGet 包
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-29
相关资源
最近更新 更多