2012-09-14 83 views
5

我使用SlowCheetah來轉換我的app.configs。我有一個多項目解決方案,其中一個項目執行構建後事件,其中bin的輸出被複制到別處。我發現SlowCheetah是在生成後事件之後進行轉換的,因此我要複製的app.config是預轉換版本。SlowCheetah在生成後事件後執行

有沒有人有我如何在SlowCheetah轉換後執行我的副本的建議?這是否需要我編寫一個自定義生成任務?

+0

我找到了解決方法。這不是優雅,但它的作品。我創建了一個虛擬項目,並將其設置爲依賴項,以在項目生成後生成事件之後進行構建。我將後期製作的複製事件從原始項目移到了這個新的虛擬項目中。這是可行的,因爲SlowCheetah已經完成了它的工作。 – ScottC

回答

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"

2

阿列克謝的回答導致了正確的解決方案,但在這裏它是在充分:

  • 右鍵單擊您的項目,並選擇Unload Project
  • 現在右擊該項目,選擇Edit [your project name].csproj
  • 滾動至底部並取消命名AfterBuild目標,並添加此屬性AfterTargets="TransformAllFiles"
  • 將您的文章建立一個使用exec命令行動納入這一目標:

一個例子:

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

我也碰到了這個問題太...決定更新到SlowCheetah的最新版本(目前2.5.8),並且這個問題似乎已經修復!使用生成後事件來部署帶有轉換的XML的項目不會出現更多問題!

經過NuGet軟件包升級過程後,我遇到了一個奇怪的問題,儘管......變換不再發生。編輯像Naeem Sarfraz這樣的項目建議,我發現SlowCheetah的PropertyGroup部分放置在.csproj的末尾。

這只是將它移動到頂部,靠近其他PropertyGroup部分的問題,現在它就像一個魅力!

0

如果在發佈之前需要複製/移動其他.config文件(除web.config以外),那麼可以使用Visual Studio 2013完成它(我沒有在早期版本上測試過) 。此部分可以在結束標記</Project >之前的.csproj文件末尾添加,並且在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文件夾包含將被複制到目標服務器上的整個應用程序。