我试图在发布事件之后调用简单的任务。当我说“发布”时,我指的是在Visual Studio中发布,右键单击项目并按下“发布...”。我已经在项目文件中包含(导入)了目标文件,它工作得很好,因为我已经在构建事件上对其进行了测试。我在http://msdn.microsoft.com/en-us/library/ms366724.aspx上发现有一个AfterPublish事件,它应该做我需要的事情,但是它没有。我不确定这是不是一个在Visual Studio中发布时应该触发的事件,有人可以澄清一下这一点。我的问题是,在Visual Studio中发布时如何从目标文件触发任何类型的任务?
我已经在目标文件中尝试过了:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="AfterPublish">
<Message Label="Test"></Message>
<Warning Label="Test"></Warning>
</Target>
</Project>
我使用的是Visual Studio 2010。
编辑:
实际上,我正在寻找在Visual Studio中执行发布操作的任何方法。我也在考虑添加构建事件,但我不知道如何确定它是否正在发布。
编辑:@Alexey Shcherbak感谢您的快速回复。我在我的MSBuild输出中得到了如下结果:
12/10/2012 12:29:40 AM: Done executing task "CallTarget".
12/10/2012 12:29:40 AM: Done building target "PipelinePreDeployCopyAllFilesToOneFolder" in project "PublishTestApp.csproj".
12/10/2012 12:29:40 AM:Done building project "PublishTestApp.csproj".
Deleting existing files...
Publishing folder /...
Publishing folder Account...
Publishing folder bin...
Publishing folder Scripts...
Publishing folder Styles...
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
========== Publish: 1 succeeded, 0 failed, 0 skipped ==========
因此,我的任务将在PipelinePreDeployCopyAllFilesToOneFolder之后执行,但在实际处理文件之前,我认为发布还没有完成。当然,我确实测试了这一点,所以在MSBuild任务中,我执行了简单的从文本文件读取,该文件应该复制到发布文件夹中,但失败了。
发布于 2017-01-13 03:43:10
我尝试了其他所有的答案,但它们都不起作用。在我的例子中,我使用VS2015发布了一个VSTO插件,所以可能会有一些不同的事情发生,但这里有两个确实有效的选择:
<Target Name="AfterPublish">
<Warning Text="publish warning 1" />
</Target>
<Target Name="CustomTarget" AfterTargets="AfterPublish">
<Warning Text="publish warning 2" />
</Target>
我(以及其他人)在这方面遇到困难的部分原因是,Message
任务似乎什么也做不了。我期望在Output
视图中显示文本,但是什么也没有显示出来。Error List
中也没有Message
项,但通过使用Warning
,它们确实显示在Error List
中。不幸的是,我对MSBuild的了解还不足以说明为什么Message
的表现不符合预期。
编辑:有关如何准确查看正在执行的目标的信息,请参阅this excellent answer。
发布于 2015-03-01 03:22:24
我刚刚在这里写了一篇关于我如何在Visual Studio2013中实现这一点的帖子:http://www.alexdresko.com/2015/02/28/taking-visual-studio-build-and-publish-events-to-the-next-level/
从本质上讲,这就是魔术:
<Target Name="Mytarget" AfterTargets="MSDeployPublish" >
<Message Text="The name of the publish profile is $(DestinationAppRoot)"/>
.... Here's where you do something awesome...
</Target>
我鼓励你阅读整篇文章以获得更多信息。
发布于 2016-02-22 23:28:38
我对另一个问题的回答可能会有一些用处。
AfterPublish script doesn't run when I publish a web app
特别是,使用“发布的文件”的路径,您可以通过$(WebProjectOutputDir)\$(WPPAllFilesInSingleFolder)
传入一个参数。这应该是类似于c:\{path to *.csproj}\obj\{build configuration}\Package\PackageTmp
的东西。
https://stackoverflow.com/questions/13781799
复制相似问题