2

我有一个安装了 SlowCheetah NuGet 包的 MVC4 Web 应用程序项目。在这个项目中,我有一个想要转换的 xml 文件(不是 Web.config)。在 csproj 文件中,项目的 TransformOnBuild 设置为 true。当我从 Visual Studio 构建项目时,文件会被转换。但是,如果我直接执行 msbuild,例如msbuild.exe mysolution.sln文件没有被转换。

查看 SlowCheetah.Transforms.targets,msbuild 的行为对我来说似乎很有意义。对于 Web 应用程序项目,TransformAllFiles 目标不包含在 BuildDepends on 属性中。相反,它依赖于发布管道的挂钩。

然而,我不明白的是,当我从 Visual Studio 构建时,转换是如何发生的。此外,尽管转换运行,但构建输出中没有任何证据,即使在详细级别也是如此。如果我将以下目标添加到我的 Web 项目中,它也会在从 Visual Studio(而不是从 msbuild)构建时运行,但不会产生任何输出。

<Target Name="DoStuff" AfterTargets="TransformAllFiles">
   <Copy SourceFiles="$(ProjectDir)_Web.config" DestinationFiles="$(ProjectDir)Web.configXXX" />   
   <Message Importance="high" Text="DoStuff completed"/>
</Target>

当我从 Visual Studio 构建项目时,我可以看到复制操作的结果,但输出中没有消息,并且构建日志中没有提及 DoStuff 目标。显然目标正在运行,但在构建输出中没有证据。谁能解释这种行为?

4

0 回答 0