我使用 SlowCheetah 来转换我的 app.configs。我有一个多项目解决方案,其中一个项目执行构建后事件,其中 bin 的输出被复制到其他地方。我发现 SlowCheetah 在构建后事件之后会进行转换,所以我正在复制的 app.config 是预转换版本。
有没有人建议我在 SlowCheetah 转换后如何执行我的副本?这是否需要我编写自定义构建任务?
我使用 SlowCheetah 来转换我的 app.configs。我有一个多项目解决方案,其中一个项目执行构建后事件,其中 bin 的输出被复制到其他地方。我发现 SlowCheetah 在构建后事件之后会进行转换,所以我正在复制的 app.config 是预转换版本。
有没有人建议我在 SlowCheetah 转换后如何执行我的副本?这是否需要我编写自定义构建任务?
如果您使用 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"
Alexey 的回答导致了正确的解决方案,但这里是完整的:
Unload Project
Edit [your project name].csproj
AfterBuild
并添加此属性AfterTargets="TransformAllFiles"
一个例子:
<Target Name="AfterBuild" AfterTargets="TransformAllFiles">
<Exec Command="ECHO Hello PostBuild World!" />
</Target>
我也遇到过这个问题...决定更新到SlowCheetah的最新版本(当前2.5.8),这个问题似乎已经解决了!使用构建后事件来部署具有转换后的 XML 的项目不再有问题!
在 NuGet 包升级过程之后,我遇到了一个奇怪的问题,但是......转换不再发生。像 Naeem Sarfraz 建议的那样编辑项目,我发现 SlowCheetah 的 PropertyGroup 部分放在 .csproj 的末尾。
只需将它移到顶部,靠近其他 PropertyGroup 部分,现在它就像一个魅力!
如果您需要在构建之后复制/移动其他 .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 文件夹包含将通过目标服务器复制的整个应用程序。