首页 文章

Visual Studio 2015在预构建时发布'Error : Copying file' gulp修订js包的重命名

提问于
浏览
0

问题本质上似乎是在.NET MVC4应用程序的发布期间,Visual Studio会抛出错误,期望复制gulp正在删除的现有bundle文件名,并在文件名中添加新的修订版# . 尽管gulp事件是“预构建” . 下面是对出现的详细描述 .

我们有一个Visual Studio 2015 MVC项目设置来运行预构建事件,该事件调用npm cmd for gulp . Gulp正在$(ConfigurationName)上有条件地缩小和捆绑资产 . 当构建为Release gulp任务时,包括一个gulp-rev cmd,用于将一个hashset附加到bundle文件名以抵消缓存问题 . 这是预构建事件:

cd $(ProjectDir)
call npm install
call npm run $(ConfigurationName)

旁注:csproj配置为使用通配符(*)包含此捆绑包 .

<ItemGroup>
  <Content Include="Areas\**\modules\dist\*.min.js" />
</ItemGroup>

在发布中成功编译 . 但是出版时会出现问题 . 我们收到此错误:

将文件C:\ MyProject \ Areas \ Quality \ modules \ dist \ documents-used-9ed3bdf4c9.bundle.min.js复制到obj \ Release \ Package \ PackageTmp \ Areas \ Quality \ modules \ dist \ scripts-9ed3bdf4c9.bundle . min.js失败了 . 找不到文件'Areas \ Quality \ modules \ dist \ scripts-9ed3bdf4c9.bundle.min.js' .

发布的构建输出如下:

1> MyProject-> C:\ workspace \ MyProject \ MyProject \ bin \ MyProject.dll 2> ------发布已启动:项目:MyProject,配置:释放任何CPU ------ 2>连接到C:\ publish ... 2>将所有文件复制到下面的临时位置以进行包/发布:2> obj \ Release \ Package \ PackageTmp . 2> C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v14.0 \ Web \ Microsoft.Web.Publishing.targets(3003,5):错误:复制文件区域\ Quality \ modules \ dist \ scripts- 9ed3bdf4c9.bundle.min.js到obj \ Release \ Package \ PackageTmp \ Areas \ Quality \ modules \ dist \ scripts-9ed3bdf4c9.bundle.min.js失败 . 找不到文件'Areas \ Quality \ modules \ dist \ scripts-9ed3bdf4c9.bundle.min.js' .

笔记:

  • 手动删除已发布的目标和项目生成的捆绑包文件可以解决问题并导致成功发布 .

  • 在csproj中设置要部署到"All files in this project"的项目可以解决问题但不是有效的解决方案 .

1 回答

  • 0

    通过将ItemGroup的Target设置为AfterBuild来解决此问题

    <Target Name="AfterBuild"> 
        <ItemGroup>
          <Content Include="Areas\**\Views\**\dist.cshtml" />
          <Content Include="Areas\**\modules\dist\*" />
          <Content Include="Areas\**\modules\dist\maps\*" /> 
        </ItemGroup>
       </Target>
    

    这导致在进行构建之后分析和包含路径,并且Gulp已呈现修订的文件 . 见MSBuild MSDN Target .

    另请注意,要在msbuild cmd的outdir中获取渲染的js文件,需要设置

    <PropertyGroup>
        <UseWPP_CopyWebApplication>True</UseWPP_CopyWebApplication>
        <PipelineDependsOnBuild>False</PipelineDependsOnBuild>
     </PropertyGroup>
    

    在csproj . 已有帖子描述这个here.

相关问题