【问题标题】:SlowCheetah executes after post-build eventsSlowCheetah 在构建后事件后执行
【发布时间】:2012-09-07 14:10:48
【问题描述】:

我使用 SlowCheetah 来转换我的 app.configs。我有一个多项目解决方案,其中一个项目执行构建后事件,其中 bin 的输出被复制到其他地方。我发现 SlowCheetah 在构建后事件之后会进行转换,所以我要复制的 app.config 是转换前的版本。

有没有人建议我在 SlowCheetah 转换后如何执行我的副本?这是否需要我编写自定义构建任务?

【问题讨论】:

  • 我找到了解决方法。它并不优雅,但它确实有效。我创建了一个虚拟项目,并将它的依赖项设置为在我有构建后事件的项目之后构建。我将构建后复制事件从原始项目移至这个新的虚拟项目。这行得通,因为 SlowCheetah 已经完成了它的工作。

标签: visual-studio-2010 msbuild slowcheetah


【解决方案1】:

如果您需要在构建之后复制/移动其他 .config 文件(web.config 除外),然后在此处发布,那么可以使用 Visual Studio 2013 来完成(我没有在早期版本上对其进行测试)。此部分可以添加到 .csproj 文件末尾的结束标记 之前,它将在 MSDeploy 开始发布过程之前被触发。

<Target Name="MoveConfigFile" BeforeTargets="MSDeployPublish">
    <Move
        SourceFiles="$(IntermediateOutputPath)Package\PackageTmp\ThirdPartyApp.config"
        DestinationFolder="$(IntermediateOutputPath)Package\PackageTmp\bin"
        OverwriteReadOnlyFiles="true"
    />
</Target>

我工作的公司购买了一个第三方产品,该产品需要在 bin 文件夹 中包含一个 .config 文件及其程序集才能工作。 p>

同时我们需要对产品的.config文件进行处理,并能够在转换后将其移动到bin文件夹

$(IntermediateOutputPath)Package\PackageTmp 文件夹包含将通过目标服务器复制的整个应用程序。

【讨论】:

    【解决方案2】:

    我也遇到了这个问题...决定更新到SlowCheetah的最新版本(当前2.5.8),这个问题似乎已经解决了!使用构建后事件部署具有转换后的 XML 的项目不再有问题!

    在 NuGet 包升级过程之后,我遇到了一个奇怪的问题,但是...不再发生转换。像 Naeem Sarfraz 建议的那样编辑项目,我发现 SlowCheetah 的 PropertyGroup 部分放在 .csproj 的末尾。

    只需将它移到顶部,靠近其他 PropertyGroup 部分,现在它就像一个魅力!

    【讨论】:

      【解决方案3】:

      Alexey 的回答导致了正确的解决方案,但这里是完整的:

      • 右键单击您的项目并选择Unload Project
      • 现在右键单击项目并选择Edit [your project name].csproj
      • 滚动到底部并取消注释名为AfterBuild的目标并添加此属性AfterTargets="TransformAllFiles"
      • 使用 Exec 命令将构建后的操作移动到此目标中:

      一个例子:

      <Target Name="AfterBuild" AfterTargets="TransformAllFiles">
       <Exec Command="ECHO Hello PostBuild World!" />
      </Target>
      

      【讨论】:

        【解决方案4】:

        如果您使用 msbuild 4.0 来构建您的项目 - 您可以使用新的 AfterTargets BeforeTargets 属性挂钩到 slowcheetah 目标。

        我不知道你想要挂钩的确切目标名称,但这段代码可以为你提供如何做到这一点的基本概念

        <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
            <Target Name="Some_Target_Name" AfterTargets="TransformAllFiles" >
                    <Message Text="= Script here will run after SlowCheetah TransformAllFiles ="/>
            </Target>
        <Project>
        

        已编辑:我安装了 SlowCheetah,发现 AfterTargets 属性应该是“TransformAllFiles”。 只需设置你的目标依赖AfterTargets="TransformAllFiles"

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-23
          • 2011-05-05
          • 1970-01-01
          • 1970-01-01
          • 2016-08-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多