【发布时间】:2010-08-24 23:03:52
【问题描述】:
世界上最简单的任务(见下文)在我发布我的 Web 应用程序项目后没有被执行。知道为什么吗?
<Target Name="AfterPublish">
<Copy SourceFiles="C:\A.txt" DestinationFiles="C:\B.txt" />
</Target>
【问题讨论】:
世界上最简单的任务(见下文)在我发布我的 Web 应用程序项目后没有被执行。知道为什么吗?
<Target Name="AfterPublish">
<Copy SourceFiles="C:\A.txt" DestinationFiles="C:\B.txt" />
</Target>
【问题讨论】:
注意:以下内容适用于 VS2010 和使用在“构建/发布 {projectname}”对话框中选择的“Web Deploy”发布方法发布 Web 应用程序项目。
Julien Hoarau 的正确之处在于“发布”不是在上述情况下调用的 msbuild 目标的名称;实际的目标名称是“MSDeployPublish”。
因此,您必须定义一个 "Target" 元素,其 "AfterTarget" 属性的值设置为 "MSDeployPublish" - “ Name”属性的值不重要(只要它在目标名称中是唯一的)。
这是怎么做的:
</Project> 标记之前添加一个 <Target Name="CustomPostPublishAction" AfterTargets="MSDeployPublish"> 元素;为“CustomPostPublishAction”选择一个您选择的名称。<Exec Command="..." /> 元素。例子:
<Target Name="CustomPostPublishActions" AfterTargets="MSDeployPublish" >
<Exec Command="echo Post-PUBLISH event: Active configuration is: $(ConfigurationName)" />
</Target>
注意:
<Target> 元素的一般文档,请参阅http://msdn.microsoft.com/en-us/library/t50z2hka.aspx
【讨论】:
Visual Studio 2013。将 Web 应用程序发布到文件系统。
<Target Name="Moose" AfterTargets="GatherAllFilesToPublish" >
<Message Importance="high" Text="***Moooooooooooooooose***$(WPPAllFilesInSingleFolder)***$(TargetDir)" />
</Target>
注意:确保构建日志至少设置为详细。在 Tools -> Options -> Projects and Solutinos -> Build and Run -> MSBuild output verbosity 下查找它。如果您想调查在实际发布之前最后一次运行哪个构建目标,诊断也很好。
【讨论】:
GatherAllFilesToPublish。
这似乎适用于 Visual Studio 2019
<Target Name="MyCustomTarget" AfterTargets="Publish">
<Copy SourceFiles="C:\A.txt" DestinationFiles="C:\B.txt" />
</Target>
【讨论】:
<Import ... /> 之后定义覆盖目标
以详细的详细信息启动 MSBuild 以了解您的目标被忽略的原因:
msbuild project.csproj /t:Target_to_Launch /v:d
AfterPublish 在Publish 目标之后调用,但Publish 不是您发布Web 应用程序时调用的目标。 Publish 是发布 ClickOnce 应用程序的目标。
您必须找到在 Visual Studio 中调用 Publish 时使用的目标,它可能是 Package、WebPublish...
【讨论】:
我现在有点懒惰,想弄清楚目标的混乱情况,以便为基于文件的发布找到合适的目标(您可能对此感兴趣)。与此同时,您可以在 *.pubxml 文件中定义 AfterBuild 目标。
<Target Name="AfterBuild">
...
我还建议关闭属性“DeleteExistingFiles”,因为如果您将文件复制到正在发布的目录中,它会在发布过程中的某个地方进行清理。
<DeleteExistingFiles>False</DeleteExistingFiles>
【讨论】: