在VisualStudio中发布事件后

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

我试图在发布事件之后调用简单任务。当我说“发布”时,我指的是在VisualStudio中发布,右键单击项目,然后按下“发布...”。我已经在项目文件中包含(导入)目标文件,这很好,因为我已经在Build事件上测试过它。我发现一事件,请有人澄清这一点。我的问题是如何在VisualStudio中发布时从目标文件中触发任何类型的任务?

我在目标文件中尝试过:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="AfterPublish">
        <Message Label="Test"></Message>        
        <Warning Label="Test"></Warning>
    </Target>   
</Project>

我正在使用VisualStudio 2010。

实际上,我正在寻找在VisualStudio中发布时执行某些操作的任何方法。我还在考虑添加构建事件,但我不知道如何确定它是否正在发布。

我在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 ==========

因此,我的任务将在管道PreDeployCopyAllFilesToOneFold之后立即执行,但在文件实际处理之前执行,而且我还没有考虑在这一点上完成发布。当然,我确实测试过这个,所以在MSBuild任务中,我执行了从文本文件中简单读取的操作,这个文本文件应该被复制到发布文件夹中,但是失败了。

提问于
用户回答回答于

我刚刚写了一篇文章,介绍了我是如何在VisualStudio 2013中实现这一目标的: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>

我鼓励你阅读整篇文章以获得更多的信息。

用户回答回答于

发布上下文菜单没有运行“发布”目标(如果我们说的是发布网站,而不是发布ClickOnce包)。

如果使用VS 2010-上下文菜单将运行“管道预DeployCopyAllFilesToOneFold”目标,而在VS 2012中(如果要切换,请记住这一点),它将运行“MSDeployPublish”目标。

我想你应该读读.Jez和我提供了相当全面的答案,说明如何在发布目标之前或之后挂钩。

简而言之,MSBuildVersion>=4.0可以使用这种方法

<Target Name="Mytarget" AfterTargets="PipelinePreDeployCopyAllFilesToOneFolder" >
    <Message Label="Test"></Message>        
    <Warning Label="Test"></Warning>
</Target>

@编辑1:使用CopyAllFilesToSingleFolderForPackage而不是管道预DeployCopyAllFilesToOneFor-文件应在此目标之后复制。如果您只需要在VS上下文中启动目标时才启动它--请检查我发布的链接,并添加更多条件--检查Visualstudio的启动情况如下Condition="'$(BuildingInsideVisualStudio)'=='true' AND '$(VisualStudioVersion)'=='10.0'"如果添加了更多的上下文,比如想在发布之后启动什么样的目标,那么它可以添加更多的上下文,帮助其他人理解问题。

扫码关注云+社区