【问题标题】:Customize Publish for ASP.NET为 ASP.NET 自定义发布
【发布时间】:2019-08-01 15:33:17
【问题描述】:

我有一个 asp.net 项目,每次发布后都需要运行一些代码。

我尝试使用 to 方法来完成这个:

  1. 使用 vs 项目文件
  2. 使用外部构建工具 Cake (c# make)

    1.) 于是找到了一些与这个问题相关的话题:

所以就像建议的那样,我在我的项目文件中添加了以下代码:

  <Target Name="BeforePublish">
    <Message Text="BeforePublish"></Message>
    <Warning Text="BeforePublish"></Warning>
  </Target>
  <Target Name="AfterPublish">
    <Message Text="AfterPublish"></Message>
    <Warning Text="AfterPublish"></Warning>
  </Target>
  <Target Name="MSDeployPublish" >
    <Message Text="MSDeployPublish"/>
    <Warning Text="MSDeployPublish"/>
  </Target>
  <Target Name="PipelinePreDeployCopyAllFilesToOneFolder" >
    <Message Text="PipelinePreDeployCopyAllFilesToOneFolder" />
    <Warning Text="PipelinePreDeployCopyAllFilesToOneFolder" />
  </Target>
  <Target Name="BeforeBuild">
    <Message Text="BeforeBuild"></Message>
    <Warning Text="BeforeBuild"></Warning>
  </Target>
  <Target Name="AfterBuild">
    <Message Text="AfterBuild"></Message>
    <Warning Text="AfterBuild"></Warning>
  </Target>

但只有 Before- & AfterBuild 被执行。所有其他目标都被完全忽略。也许是因为这些其他主题使用 VS 2010 和 2012。在 VS 2017 中有没有可行的方法来做到这一点?

2.) 当我在任务中使用以下代码时,我得到的输出与使用 VS 编译时不同。

   MSBuild(projectFile, new MSBuildSettings()
   .WithProperty("OutDir", publishDir)
   .WithProperty("DeployTarget", "WebPublish")
   .WithProperty("DeployOnBuild", "true")
   .WithProperty("WebPublishMethod", "FileSystem")
   .WithProperty("Configuration", "Release")
   );

因此,这也不是一个可行的解决方案。

感谢任何帮助以某种方式工作。

【问题讨论】:

  • 嗨朋友,我的回答对这个问题有用吗?如果有最新消息,请随时在这里分享。

标签: c# asp.net automation msbuild visual-studio-2017


【解决方案1】:

这取决于你想做什么,但如果你想让你的代码在发布后运行,你需要将你的任务放在 Microsoft.Web.Publishing.targets 的目标之一之后(搜索文件以查看目标的完整列表)。通常你需要AfterTargets="MSDeployPublish"

【讨论】:

  • 嗯,这个目标不适用于我在初始帖子中可见
【解决方案2】:

1.) 所以找到了一些与这个问题相关的话题。所以就像建议的那样,我在我的项目文件中添加了以下代码。 实际上,经过我在 vs2017 中的测试,从详细的输出日志中,我可以在发布时发现如下图:

1.似乎在VS2017中,在IDE中发布项目时,没有有效的发布目标重新定义或AfterTargets。 所以用VS发布恐怕达不到这个目的。

2.相反,我认为您可以考虑使用 msbuild 工具。将下面的测试目标脚本添加到您的发布配置文件中(对我来说:FolderProfile.pubxml):

<Project...>
...
  <Target Name="Test" AfterTargets="WebFileSystemPublish">
    <Message Text="I'm a test target after webpublish"/>
    <Move SourceFiles="C:\Ase\favicon.ico" DestinationFolder="C:\tomorrow"/>
  </Target>
</Project>

打开 vs2017 的开发者命令提示符,然后输入如下命令:

msbuild C:\xxx\WebApplication55\WebApplication55.sln /p:DeployOnBuild=true /p:PublishProfile=C:\xxx\repos\WebApplication55\WebApplication55\Properties\PublishProfiles\FolderProfile.pubxml 

它将在 webpublish 过程之后运行测试目标。

2.) 当我在任务中使用以下代码时,我得到的输出与使用 VS 编译它时不同。 不确定您将此代码用于什么目的。但是您可以使用测试目标来做您想做的事情。在测试目标中添加MSBuild Task 可以为您的#2 实现此目标。

正如您提到的,您有一些代码,首先将这些代码编译为 .exe,然后在测试目标中添加 Command Task 可能会有所帮助。 另外:根据您上面的信息,您似乎使用文件系统和asp.net,所以我使用asp.net web app进行测试(不是.net core)。预计会有反馈。

【讨论】:

  • 所以,在搜索更多之后,我找到了目标“CopyAllFilesToSingleFolderForPackage”,尽管它不是最理想的。是的,我确实使用了 FileSystem Publish,遗憾的是,将目标放入 publishprofile 并没有解决问题。现在我将只使用 CopyAllFiles 的稍微糟糕的版本。
  • 嗨,朋友,我已经尝试过 CopyAllFilesToSingleFolderForPackage,它可以用于 VS IDE 中的新发布。但是对于publishprofile,你的意思是如果你通过命令行使用msbuild,它不起作用还是只有目标“测试”不起作用?
猜你喜欢
  • 2010-11-04
  • 1970-01-01
  • 1970-01-01
  • 2019-10-09
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 2017-09-09
  • 1970-01-01
相关资源
最近更新 更多