VS 2012使用MSBuilld命令发布配置文件和复制文件

5 msbuild azure visual-studio-2012

我在Azure上使用TFS在线设置了asp.net网站,以便使用VS 2012进行源代码控制.我正在尝试使用VS 2012新发布配置文件和MSBuild复制文件.阅读本文Visual Studio 2012 Web部署项目已停止 - Long Live Publishing Profiles,其中Doug说您可以在发布配置文件中使用构建脚本.

所以我在我的本地构建中设置了一个适用于我的.csproj的测试.我只是将robots.txt文件从根目录复制到css目录.这是我的测试.我在流程> 6下的TFS Build Process模板中设置了我的pubxml.发布 - Azure网站,Web部署Pubish Profile.

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

我把这个代码放到了我的pubxml文件中,我什么都没有.我究竟做错了什么?是否可以在Azure上构建后复制文件?

附加信息

日志文件包含这些行,因此我确定发布配置文件正在运行.

AfterBuild:
  Creating directory "C:\a\src\...\css".
  Copying file from "C:\a\src\...\robots.txt" to "C:\a\src\...\css\robots.txt".
Run Code Online (Sandbox Code Playgroud)

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

  1. ValidateSolutionConfiguration:
  2. PrepareForBuild:
  3. CoreCompile:
  4. _CopyFilesMarkedCopyLocal:
  5. CopyFilesToOutputDirectory:
  6. GenerateTargetFrameworkMonikerAttribute:
  7. CoreCompile:
  8. _CopyFilesMarkedCopyLocal:
  9. CopyFilesToOutputDirectory:
  10. _CopyWebApplicationLegacy:
  11. ValidateGlobalPackageSetting:
  12. CollectFilesFromIntermediateAssembly:
  13. CollectFilesFromContent:
  14. CollectFilesFromIntermediateSatelliteAssembliesWithTargetPath:
  15. CollectFilesFromReference:
  16. CollectFilesFromAllExtraReferenceFiles:
  17. CollectFilesFrom_binDeployableAssemblies:
  18. PipelineCollectFilesPhase:
  19. ExcludeGeneratedDebugSymbol:
  20. PreTransformWebConfig:
  21. TransformWebConfigCore:
  22. PostTransformWebConfig:
  23. PreProfileTransformWebConfig:
  24. PipelineTransformPhase:
  25. ProcessPublishDatabaseSettings:
  26. PreAutoParameterizationWebConfigConnectionStrings:
  27. AutoParameterizationWebConfigConnectionStringsCore:
  28. PostAutoParameterizationWebConfigConnectionStrings:
  29. PipelineMsdeploySpecificTransformPhase:
  30. ValidatePublishProfileSettings:
  31. CopyAllFilesToSingleFolderForMsdeploy:
  32. PipelineCopyAllFilesToOneFolderForMsdeploy:
  33. 包:
  34. GenerateMsdeployManifestFiles:
  35. PackageUsingManifest:
  36. GenerateSampleDeployScript:
  37. PipelineDeployPhase:
  38. AfterBuild:

所以看起来Azure在"31. CopyAllFilesToSingleFolderForMsdeploy"步骤中打包了所有文件.看起来在AfterBuild步骤中运行副本是迟到的.我将Copy命令移动到目标"BeforeBuild",但文件仍然没有在CopyAllFilesToOneFolderForMsdeploy步骤中结束.

小智 6

感谢Sayed Ibrahim Hashimi的文章如何在发布/包之前压缩CSS/JavaScript以帮助我解决这个问题.

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

<Target Name="AdditionalFilesForPackage" AfterTargets="CopyAllFilesToSingleFolderForMsdeploy">
    <Copy SourceFiles="$(ProjectDir)robots.txt" DestinationFolder="$(_PackageTempDir)\css\" />  
</Target>
Run Code Online (Sandbox Code Playgroud)