visual-studio-2013 - MSBuild:如何在 _CopyFilesToPublishFolder 之后运行自定义目标?

标签 visual-studio-2013 msbuild clickonce

我正在使用 Visual Studio 2013。我尝试通过传递 /target:publish 从命令行发布 ClickOnce 应用程序。但是,在 MSBuild 将所有文件复制到发布文件夹后,我想执行一些额外的步骤。这是我到目前为止所想到的:

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <MSBuildCommunityTasksPath>$(SolutionDir)\.build</MSBuildCommunityTasksPath>
    <MSBuildCommunityTasksLib>$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.dll</MSBuildCommunityTasksLib>
    <ClickOnceBuildDirectory>$(ProjectDir)\bin\app.publish</ClickOnceBuildDirectory>
  </PropertyGroup>

  <Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.targets" />
  <UsingTask TaskName="FileUpdate" AssemblyFile="$(MSBuildCommunityTasksLib)" />

  <Target Name="CustomPostPublishActions" AfterTargets="PublishBuild" >
    <!-- Create directory -->
    <MakeDir Directories="$(ProjectDir)..\Deploy\Client\Application Files" />
    <!-- Copy published website to deployment location -->
    <ItemGroup>
      <_CopyItems Include="$(ClickOnceBuildDirectory)\**\*.*" />
    </ItemGroup>
    <Copy SourceFiles="@(_CopyItems)" DestinationFolder="$(ProjectDir)..\Deploy\Client" />
    <!-- Write publish.htm file for ClickOnce -->
    <Copy SourceFiles="$(ProjectDir)\..\..\Build\publish.htm" DestinationFiles="$(ProjectDir)..\Deploy\Client\publish.htm" />
    <FileUpdate Files="$(ProjectDir)..\Deploy\Client\publish.htm" Regex="{VERSION}" IgnoreCase="true" Multiline="true" Singleline="false" ReplacementText="$(ApplicationVersion)" />
  </Target>
</Project>

不幸的是,这是目标运行的顺序:

CustomPostPublishActions:
         Creating directory "C:\MyProject\..\Deploy\Client\Application Files".
         Copying file from "C:\MyProject\\bin\app.publish\DeploymentScheduler.exe" to "C:\MyProject\..\Deploy\Client\DeploymentScheduler.exe".
         Copying file from "C:\MyProject\\..\..\Build\publish.htm" to "C:\MyProject\..\Deploy\Client\publish.htm".
         Updating File "C:\MyProject\..\Deploy\Client\publish.htm".
_CopyFilesToPublishFolder:
         Creating directory "bin\app.publish\Application Files\MyApplication_1_0_0_0".
         Copying file from "bin\MyProject.exe.manifest" to "bin\app.publish\Application Files\MyProject_1_0_0_0\MyProject.exe.manifest".
         Copying file from "bin\app.publish\MyProject.exe" to "bin\app.publish\Application Files\MyProject_1_0_0_0\MyProject.exe.deploy".
         Copying file from "app.config" to "bin\app.publish\Application Files\MyProject_1_0_0_0\MyProject.exe.config.deploy".
         Copying file from "obj\Debug\MyProject.pdb" to "bin\app.publish\Application Files\MyProject_1_0_0_0\MyProject.pdb.deploy".
     1>Done Building Project

基本上,如何让我的目标“CustomPostPublishActions”在“_CopyFilesToPublishFolder”之后运行?有可能吗?非常感谢任何帮助!

最佳答案

有一些预定义的目标可以被覆盖以在发布之前或之后运行,请像这样更新您的脚本:

<Target Name="AfterPublish">
    <!-- Create directory -->
    <MakeDir Directories="$(ProjectDir)..\Deploy\Client\Application Files" />
    <!-- Copy published website to deployment location -->
    <ItemGroup>
      <_CopyItems Include="$(ClickOnceBuildDirectory)\**\*.*" />
    </ItemGroup>
    <Copy SourceFiles="@(_CopyItems)" DestinationFolder="$(ProjectDir)..\Deploy\Client" />
    <!-- Write publish.htm file for ClickOnce -->
    <Copy SourceFiles="$(ProjectDir)\..\..\Build\publish.htm" DestinationFiles="$(ProjectDir)..\Deploy\Client\publish.htm" />
    <FileUpdate Files="$(ProjectDir)..\Deploy\Client\publish.htm" Regex="{VERSION}" IgnoreCase="true" Multiline="true" Singleline="false" ReplacementText="$(ApplicationVersion)" />
</Target>

这个link将使您了解现有的可覆盖目标以及如何使用它们。

关于visual-studio-2013 - MSBuild:如何在 _CopyFilesToPublishFolder 之后运行自定义目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33576864/

相关文章:

c++ - 如何在 Visual Studio 中自动缩进#pragma 指令

post - MSBuild 条件执行?

jenkins - 如何在 Jenkins 中构建多分支项目?

c# - ClickOnce 和 IsolatedStorage

.net - 如何从应用程序内启动 ClickOnce 应用程序的卸载?

c# - 如何使用 C#/.NET 代码获取 ClickOnce 应用程序路径和版本号?

c++ - 使/欺骗 Visual C++ 正确地缩进宏结构

c# - 如何通过 .NET API 打开 AutoCAD 2015

visual-studio-2010 - TeamCity 不编译 Visual Studio MS 测试项目

c++ - 哈希函数 lambda 无法使用 unordered_map 进行编译