我有一个自定义的.targets文件,我将其导入到我的C#MVC Web应用程序的项目文件中.我已经为此添加了自定义目标:
<Target Name="CopyFiles" BeforeTargets="Build"></Target>
Run Code Online (Sandbox Code Playgroud)
这在Visual Studio下构建时工作正常,但是当我使用TeamCity构建它时,目标永远不会运行,我无法解决原因.
如果我改变目标使用BeforeTargets ="Compile",那么它就会运行.或者,如果我将名为Build的其他目标添加到.targets文件中
<Target Name="Build" />
Run Code Online (Sandbox Code Playgroud)
然后它会运行,但这样做会覆盖现有的Build目标,因此我的应用程序不会构建.我无法弄清楚这个逻辑 - 它没有意义.我现在正在使用Compile目标,但是如果有人可以解释为什么在Build任务不起作用之前尝试执行它我会非常感激.
我正在向.tt我的项目中添加一个自定义模板生成目标以运行 before CoreBuild,并且似乎有两种方法可以做到:
<Project...>
<Target Name="TransformOnBuild" AfterTargets="BeforeBuild">
</Project>
Run Code Online (Sandbox Code Playgroud)
和
<Project...>
<Target Name="TransformOnBuild" BeforeTargets="CoreBuild">
</Project>
Run Code Online (Sandbox Code Playgroud)
如果我的目标应该在我的项目构建之前运行,因为项目依赖于它,我使用后者会更好吗?我见过前者用来做诸如生成文本模板之类的事情,但这似乎是一种不可靠的方法,因为它可能会在 之后运行CoreBuild,这为时已晚。或者有什么理由为什么AfterTargets="BeforeBuild"仍然保证在核心构建之前运行?
我还看到BeforeTargets="BeforeBuild"哪个会更早构建。这是放置`.tt 文本生成目标的更好地方吗?