我已经建立了一个愉快的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库包含在源代码控制中的另一种方法是吗?我确实想避免这种情况,但是,如果这是标准方法,那么我很乐意做到这一点。
非常感谢在Azure DevOps中实现此目标的任何建议或YAML示例。
答案 0 :(得分:3)
在我们的案例中,恢复LibMan JS库的问题原来是几个月前另一位开发人员添加的项目文件设置,当时他们遇到了构建速度慢的问题as mentioned here。
<PropertyGroup>
<LibraryRestore>false</LibraryRestore>
</PropertyGroup>
一旦找到并删除了此设置,毫无疑问,LibMan还原可以完美地工作,并且构建时间也不会特别慢。
我想理想的情况是不要尝试在每个构建上都进行LibMan还原,而是在开发人员机器上手动进行,然后作为DevOps构建管道中的特定步骤?但是无论如何,现在一切正常。
答案 1 :(得分:2)
在Azure DevOps构建管道中还原Libman JS库
您无需向管道添加.net core
自定义命令即可还原JS库。
我已经创建了一个示例来测试LibMan
构建软件包,并且在Azure devops上运行良好。
要使用LibMan
构建软件包,首先,需要在项目中使用JS库设置正确的libman.json
,例如:
{
"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库。您可以在microsoft.web.librarymanager.build.targets
构建包中的LibMan
中找到以下目标:
<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构建完成之后,我可以在文件夹JS libraries
中获得wwwroot/lib/jquery
:
如果仍然无法解决问题,请确保在不使用Azure Devops的情况下从Visual Studio生成时可以还原JS库。
顺便说一句,您还可以使用任务Libman(预览)代替MSBuild来恢复libman.json
中定义的软件包。
希望这会有所帮助。