5

我已经在 Azure 上设置了带有 TFS 的 asp.net 网站,用于使用 VS 2012 进行源代码控制。我正在尝试使用 VS 2012 新发布配置文件和 MSBuild 复制文件。阅读这篇文章Visual Studio 2012 Web Deployment Projects are Dead – Long Live Publishing Profiles,Doug 说您可以在发布配置文件中使用构建脚本。

因此,我在本地构建的 .csproj 中设置了一个测试。我只是简单地将 robots.txt 文件从根目录复制到 css 目录。这是我的测试。我在 TFS Build Process 模板中设置了我的 pubxml,在 process > 6. Publishing -- Azure Website, Web Deploy Pubish Profile 下。

<Target Name="AfterBuild">
    <Copy SourceFiles="$(ProjectDir)robots.txt" DestinationFolder="$(ProjectDir)css\" />
</Target>

我将此代码放入我的 pubxml 文件中,但我什么也没得到。我究竟做错了什么?是否可以在 Azure 上构建后复制文件?

附加信息

日志文件包含这些行,所以我确定发布配置文件正在运行。

AfterBuild:
  Creating directory "C:\a\src\...\css".
  Copying file from "C:\a\src\...\robots.txt" to "C:\a\src\...\css\robots.txt".

以下是 Azure 的默认构建模板使用的构建步骤:

  1. 验证解决方案配置:
  2. PrepareForBuild:
  3. 核心编译:
  4. _CopyFilesMarkedCopyLocal:
  5. 复制文件到输出目录:
  6. GenerateTargetFrameworkMonikerAttribute:
  7. 核心编译:
  8. _CopyFilesMarkedCopyLocal:
  9. 复制文件到输出目录:
  10. _CopyWebApplicationLegacy:
  11. 验证全局包设置:
  12. 从IntermediateAssembly 收集文件:
  13. 从内容收集文件:
  14. CollectFilesFromIntermediateSatelliteAssembliesWithTargetPath:
  15. 从参考收集文件:
  16. CollectFilesFromAllExtraReferenceFiles:
  17. CollectFilesFrom_binDeployableAssemblies:
  18. 管道收集文件阶段:
  19. 排除生成调试符号:
  20. PreTransformWebConfig:
  21. TransformWebConfigCore:
  22. PostTransformWebConfig:
  23. PreProfileTransformWebConfig:
  24. 管道转换阶段:
  25. ProcessPublishDatabase设置:
  26. PreAutoParameterizationWebConfigConnectionStrings:
  27. AutoParameterizationWebConfigConnectionStringsCore:
  28. PostAutoParameterizationWebConfigConnectionStrings:
  29. PipelineMsdeploySpecificTransformPhase:
  30. 验证发布配置文件设置:
  31. CopyAllFilesToSingleFolderForMsdeploy:
  32. PipelineCopyAllFilesToOneFolderForMsdeploy:
  33. 包裹:
  34. 生成MsdeployManifestFiles:
  35. PackageUsingManifest:
  36. 生成示例部署脚本:
  37. 管道部署阶段:
  38. 构建后:

所以看起来 Azure 在“31. CopyAllFilesToSingleFolderForMsdeploy”步骤中打包了所有文件。在 AfterBuild 步骤中运行副本似乎为时已晚。我将 Copy 命令移至目标“BeforeBuild”,但文件仍未在 CopyAllFilesToOneFolderForMsdeploy 步骤中结束。

4

1 回答 1

7

感谢 Sayed Ibrahim Hashimi 的文章How to compress CSS/JavaScript before publish/package帮助我解决了这个问题。

可以直接复制Package Temp Directory。我最终将此目标添加到我的发布配置文件 (pubxml) 文件中。在“CopyAllFilesTOSingleFolderForMsdeploy”步骤完成后,此步骤将运行,这会将文件从解决方案的一部分复制到您指定的目标文件夹中。

<Target Name="AdditionalFilesForPackage" AfterTargets="CopyAllFilesToSingleFolderForMsdeploy">
    <Copy SourceFiles="$(ProjectDir)robots.txt" DestinationFolder="$(_PackageTempDir)\css\" />  
</Target>
于 2013-01-14T23:30:59.760 回答