5

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

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

4

4 回答 4

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"

于 2012-09-14T18:27:25.727 回答
2

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

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

一个例子:

<Target Name="AfterBuild" AfterTargets="TransformAllFiles">
 <Exec Command="ECHO Hello PostBuild World!" />
</Target>
于 2012-12-05T15:33:55.183 回答
0

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

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

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

于 2013-10-17T17:48:03.983 回答
0

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

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

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

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

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

于 2014-11-13T00:16:33.250 回答