在 Visual Studio 2013 中完成整个编译后是不是可以运行构建后事件?
Posted
技术标签:
【中文标题】在 Visual Studio 2013 中完成整个编译后是不是可以运行构建后事件?【英文标题】:Is it possible to run a post build event when the whole compilation finishes in Visual Studio 2013?在 Visual Studio 2013 中完成整个编译后是否可以运行构建后事件? 【发布时间】:2015-01-21 14:19:51 【问题描述】:我有一个包含多个项目的解决方案,我们使用 FxCop。我们希望在请求的编译完成后运行它(它可能是一个项目、一个包含多个文件夹的文件夹或整个解决方案)。
有没有办法做到这一点?我们目前每个项目都这样做,但这有一些缺点。
【问题讨论】:
是的,请看这篇文章:msdn.microsoft.com/en-us/library/dn376353.aspx 考虑为此使用 Teamcity。每次在开发人员机器上运行它都是开销。也看这里:sedodream.com/2010/10/22/MSBuildExtendingTheSolutionBuild.aspx @AuthorProxy:可能更糟糕的是,为了能够修复您会发现的大量 fxcop 问题并在每次迭代修复后重复它而必须请求构建。如果您对它不感兴趣,我们已经有一个禁用 fxcop 的构建定义。 我们使用 stylecop 并在发布到 teamcity 之前手动运行它,因为大多数时候我们知道什么时候需要重新测试,什么时候不需要。例如,在更改 javascript 或配置时,我们不想等待 stylecop 重新测试干净的解决方案。 TC 进行最终检查。一切都很好。此外,您可以将其附加到 git precommit 事件处理程序。 【参考方案1】:是的,有一种方法可以通过在您的解决方案文件旁边放置一个文件with a specific naming pattern:after.Your solution name here.sln.targets
<!--?xml version="1.0" encoding="utf-8"?-->
<project toolsversion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<target name="AtTheStart" beforetargets="Build">
<message text="GenerateCode target running" importance="high">
</message>
</target>
<target name="AtTheEnd" aftertargets="Build">
<message text="GenerateCode target running" importance="high">
</message>
</target>
</project>
但是,如果您想有效地运行 FxCop 并安装了 visualstudio,您实际上可以在构建期间通过在调用 MsBuild 时包含 /p:RunCodeAnalysis=true
或 /p:RunCodeAnalysis=always
来激活它。这将在构建期间运行配置的规则集文件。 /p:CodeAnalysisRuleSet=PathTo.ruleset
会让你指定一个特定的规则集文件。
命令行将始终覆盖项目自己的配置。它将以最优化的方式运行。
【讨论】:
目标文件看起来很有希望。我们已经有 FxCop 10 的自定义规则,所以我们不希望将它们移植到 VS2013。 当您使用.ruleset
文件注册它们时,CodeAnalysis 也会很高兴地运行您的自定义规则。它们需要针对匹配的 Visual Studio 版本重新编译才能运行。
/p:RunCodeAnalysis=true
【参考方案2】:
我会将 FxCop 项目集(在所有项目中包含所有 dll)并在所有项目都在 VS 中构建后调用它。
【讨论】:
以上是关于在 Visual Studio 2013 中完成整个编译后是不是可以运行构建后事件?的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 2013 中完成整个编译后是不是可以运行构建后事件?
如何在 Visual Studio 2013 中查看代码审查注释