我有一个asp.net项目,每次发布后都需要运行一些代码。
我尝试通过以下方式完成此操作:
使用外部构建工具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解决方案。
感谢您为使此功能以一种或另一种方式工作提供的帮助。
答案 0 :(得分:0)
这取决于您要执行的操作,但是如果要在发布后运行代码,则需要将任务放在 Microsoft.Web.Publishing.targets 中的目标之一之后(搜索以查看完整的目标列表)。通常您需要AfterTargets="MSDeployPublish"
答案 1 :(得分:0)
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
它将在网络发布过程之后运行测试目标。
2。)当我在任务中使用以下代码时,得到的输出与使用VS进行编译时得到的输出不同。 不确定您将这段代码用于什么。但是您可以使用测试目标来完成所需的工作。在测试目标中添加MSBuild Task可以为您的#2达到这一目标。
正如您提到的,您有一些代码,请先将这些代码编译为.exe,然后在测试目标中添加Command Task可能会有所帮助。 另外:根据上面的信息,看来您使用文件系统和asp.net,所以我使用asp.net Web应用程序进行测试(不是.net核心)。会得到反馈。