我有一个安装了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目标。很明显,目标正在运行,但在构建输出中没有任何证据。任何人都可以解释这种行为吗?