如何解决 MSBuild 抛出错误 MSB3030:无法复制文件 "Scripts\dist\main.bundle.js" 因为找不到
How to resolve MSBuild throws Error MSB3030: Could not copy the file "Scripts\dist\main.bundle.js" because it was not found
Azure Pipeline 项目有两个生成代理
- 构建 Angular 项目。
构建成功,资产、chunk.js 文件和 bundle.js 文件作为工件发布
- 构建 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'
当 MSBuild 构建 ASP.net 项目时,无法找到 ##[error]C:\Program Files (x86)\Microsoft Visual Studio17\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 构建 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
我的 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*"));
}
}
从逻辑上讲,这应该可行。
我想知道这里缺少什么?为什么 MSBuild 找不到我在 Scripts/dist.
中提取的包
复制到 Scripts/dist 文件夹的 main.bundle.js 是 main.7515c53aa0f2ef625908.bundle.js 但 MSBuild 不考虑它。
同意Thangadurai,这可能是一个与路径相关的问题。
勾选$(build.sourcesDirectory)/Scripts/dist
,$(build.sourcesDirectory)
一般代表解决方案目录。所以现在你的文件结构是这样的:
`$(build.sourcesDirectory)`(sln directory)
|
Scripts
| |
| ----dist
| |
| ----main.xxx.bundle.js
|
xx.sln
|
NMG.WebApp.MVCForAngular
|
NMG.WebApp.MVCForAngular.csproj
|
Scripts
提取出来的main.xx.js放在Solution目录下的Script文件夹中,但是当msbuild + NMG.WebApp.MVCForAngular.csproj
.
时,msbuild会在Project目录下搜索Script文件夹
另外:建议你检查NMG.WebApp.MVCForAngular.csproj
的内容中是否存在对Scripts\dist\main.bundle.js
的引用,如果存在,你还需要确保提取的文件名与项目文件中的引用完全匹配。
Msbuild 不会将 main.7515c53aa0f2ef625908.bundle.js
和 main.bundle.js
视为同一个,因此如果提取文件的名称与项目文件中的引用不匹配,您也会收到该错误。
实际问题是,当 MSBuild 创建发布文件时,它会根据构建定义复制文件。我如下编辑了 .csproj 文件,复制了相关文件。
<Content Include="assets\i18n\**" />
<Content Include="Scripts\dist\*.bundle.js" />
<Content Include="Scripts\dist\*.bundle.css" />
<Content Include="*.chunk.js" />
这是可能的,因为在 MSBuild 任务之前,我确实将 angular 文件复制到相关文件夹。
Azure Pipeline 项目有两个生成代理
- 构建 Angular 项目。
构建成功,资产、chunk.js 文件和 bundle.js 文件作为工件发布
- 构建 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'
当 MSBuild 构建 ASP.net 项目时,无法找到 ##[error]C:\Program Files (x86)\Microsoft Visual Studio17\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 构建 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
我的 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*"));
}
}
从逻辑上讲,这应该可行。
我想知道这里缺少什么?为什么 MSBuild 找不到我在 Scripts/dist.
中提取的包复制到 Scripts/dist 文件夹的 main.bundle.js 是 main.7515c53aa0f2ef625908.bundle.js 但 MSBuild 不考虑它。
同意Thangadurai,这可能是一个与路径相关的问题。
勾选$(build.sourcesDirectory)/Scripts/dist
,$(build.sourcesDirectory)
一般代表解决方案目录。所以现在你的文件结构是这样的:
`$(build.sourcesDirectory)`(sln directory)
|
Scripts
| |
| ----dist
| |
| ----main.xxx.bundle.js
|
xx.sln
|
NMG.WebApp.MVCForAngular
|
NMG.WebApp.MVCForAngular.csproj
|
Scripts
提取出来的main.xx.js放在Solution目录下的Script文件夹中,但是当msbuild + NMG.WebApp.MVCForAngular.csproj
.
另外:建议你检查NMG.WebApp.MVCForAngular.csproj
的内容中是否存在对Scripts\dist\main.bundle.js
的引用,如果存在,你还需要确保提取的文件名与项目文件中的引用完全匹配。
Msbuild 不会将 main.7515c53aa0f2ef625908.bundle.js
和 main.bundle.js
视为同一个,因此如果提取文件的名称与项目文件中的引用不匹配,您也会收到该错误。
实际问题是,当 MSBuild 创建发布文件时,它会根据构建定义复制文件。我如下编辑了 .csproj 文件,复制了相关文件。
<Content Include="assets\i18n\**" />
<Content Include="Scripts\dist\*.bundle.js" />
<Content Include="Scripts\dist\*.bundle.css" />
<Content Include="*.chunk.js" />
这是可能的,因为在 MSBuild 任务之前,我确实将 angular 文件复制到相关文件夹。