自定义ASP.NET的发布

时间:2019-03-11 10:31:23

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

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

我尝试通过以下方式完成此操作:

  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>

但仅执行BeforeBuild和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")
   );

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

感谢您为使此功能以一种或另一种方式工作提供的帮助。

2 个答案:

答案 0 :(得分:0)

这取决于您要执行的操作,但是如果要在发布后运行代码,则需要将任务放在 Microsoft.Web.Publishing.targets 中的目标之一之后(搜索以查看完整的目标列表)。通常您需要AfterTargets="MSDeployPublish"

答案 1 :(得分:0)

  

1。)因此找到了与此问题相关的一些主题。因此,如建议的那样,我在项目文件中添加了以下代码。   实际上,在vs2017中进行测试之后,从输出日志中获得详细信息,发布时我可以找到的图片如下图所示:

enter image description here enter image description here

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 

它将在网络发布过程之后运行测试目标。

  

2。)当我在任务中使用以下代码时,得到的输出与使用VS进行编译时得到的输出不同。   不确定您将这段代码用于什么。但是您可以使用测试目标来完成所需的工作。在测试目标中添加MSBuild Task可以为您的#2达到这一目标。

正如您提到的,您有一些代码,请先将这些代码编译为.exe,然后在测试目标中添加Command Task可能会有所帮助。 另外:根据上面的信息,看来您使用文件系统和asp.net,所以我使用asp.net Web应用程序进行测试(不是.net核心)。会得到反馈。