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

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

然而,我不明白的是,当我从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目标 . 很明显,目标正在运行,但在构建输出中没有任何证据 . 谁能解释这种行为?