如何解决 MSBuild 引发错误 MSB3030:无法复制文件“Scripts\dist\main.bundle.js”,因为找不到该文件

Des*_*ond 1 msbuild asp.net-mvc msbuild-task angular-cli azure-pipelines

Azure Pipeline 项目有两个构建代理

  1. 构建角度项目。

构建成功,资产、chunk.js 文件和bundle.js 文件作为工件发布

  1. 构建 ASP.net Web 应用程序。

我从以前的构建代理下载工件并将它们提取到$(build.stagingDirectory)/Scripts/dist目录中,因为它们将被 ASP.net 项目使用。

我的提取文件任务 ymal 是

steps:
- task: ExtractFiles@1
  displayName: 'Extract files bundle.zip'
  inputs:
    archiveFilePatterns: '$(Pipeline.Workspace)/dist/$(Build.BuildId)_bundle.zip'
    destinationFolder: '$(build.sourcesDirectory)/Scripts/dist' 
Run Code Online (Sandbox Code Playgroud)

MSBuild构建 ASP.net 项目时,它无法找到##[error]C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications\Microsoft.WebApplication.targets(182,5): Error MSB3030: Could not copy the file "Scripts\dist\main.bundle.js" because it was not found.

MS Build yaml 是:

steps:
- task: MSBuild@1
  displayName: 'Build solution NMG.Portal.MVCForAngular'
  inputs:
    solution: NMG.WebApp.MVCForAngular/NMG.WebApp.MVCForAngular.csproj
    msbuildArguments: '/p:ProjectFile=$(build.sourcesDirectory)\NMG.WebApp.MVCForAngular\NMG.WebApp.MVCForAngular.csproj /p:DeployOnBuild=true /p:SkipInvalidConfigurations=true /p:OutDir="$(build.stagingDirectory)\\"'
    clean: false
    logProjectEvents: true
    createLogFile: true
Run Code Online (Sandbox Code Playgroud)

我的 ASP.NET BundleConfig.cs 文件具有以下代码。

public class BundleConfig
    {
        // For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862
        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                        "~/Scripts/jquery-{version}.js"));
            // Use the development version of Modernizr to develop with and learn from. Then, when you're
            // ready for production, use the build tool at http://modernizr.com to pick only the tests you need.
            bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                        "~/Scripts/modernizr-*"));

            bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
                      "~/Scripts/bootstrap.js",
                      "~/Scripts/respond.js"));

            bundles.Add(new StyleBundle("~/Content/css").Include(
                      "~/Content/bootstrap.css",
                      "~/Content/site.css"));

            bundles.Add(new ScriptBundle("~/bundles/nmg").Include(
                "~/Scripts/dist/inline*",
                "~/Scripts/dist/polyfills*",
                "~/Scripts/dist/scripts*",
                "~/Scripts/dist/vendor*",
                "~/Scripts/dist/main*"));

            bundles.Add(new StyleBundle("~/Content/nmg").Include(
                 "~/Scripts/dist/styles*"));
        }
    }
Run Code Online (Sandbox Code Playgroud)

从逻辑上讲,这应该可行。

我想知道这里缺少什么?为什么 MSBuild 找不到我在 Scripts/dist 中提取的包。

复制到 Scripts/dist 文件夹的 main.bundle.js 是 main.7515c53aa0f2ef625908.bundle.js 但 MSBuild 不考虑它。

Des*_*ond 5

实际问题是,当 MSBuild 创建发布文件时,它会根据构建定义复制文件。我编辑了 .csproj 文件,如下所示,复制了相关文件。

<Content Include="assets\i18n\**" />    
<Content Include="Scripts\dist\*.bundle.js" />
<Content Include="Scripts\dist\*.bundle.css" />
<Content Include="*.chunk.js" />
Run Code Online (Sandbox Code Playgroud)

这是可能的,因为在 MSBuild 任务之前,我确实将角度文件复制到相关文件夹。