3

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

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

我已经包含了 LibMan 构建包(我读过它会自动执行任务),但没有任何乐趣。

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

我真的需要在管道中添加一个 .net core 自定义命令,安装 LibraryManager Cli 工具,然后调用它来恢复 JS 库吗?它似乎比我预期的要复杂,而且我还没有找到任何人在网上这样做的例子。

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

在 Azure DevOps 中实现此目标的任何建议或 YAML 示例将不胜感激。

4

2 回答 2

5

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

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

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

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

于 2020-01-20T11:14:07.760 回答
3

在 Azure DevOps Build Pipeline 中恢复 Libman JS 库

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

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

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

{
  "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. 您将microsoft.web.librarymanager.build.targetsLibMan构建包中找到以下目标:

<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 build 完成后,我可以JS libraries在文件夹中获取wwwroot/lib/jquery

在此处输入图像描述

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

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

希望这可以帮助。

于 2020-01-15T09:17:40.457 回答