2010-02-06 34 views
2

我需要構建一個MSBUILD腳本來執行.SQL腳本,自上次構建以來已更改。MSBUILD只執行已更改的SQL腳本

我最初認爲我可以使用<Copy>任務將複製任務中的所有腳本從一個文件夾複製到另一個文件夾,並使用CopiedFiles <Output>。但是,複製任務返回它嘗試複製的所有文件,而不是實際複製的文件。

我能夠得到MSBUILD通過MSBUILD.ExtensionPack但是我抓我的頭就這一個

+0

看來我的一些文字被解讀爲標籤編寫的清單,第二段應: 我最初以爲我可以複製所有的腳本使用COPY任務將一個文件夾複製到另一個文件夾,並使用CopiedFiles OUTPUT進行復制任務。但是,複製任務返回它嘗試複製的所有文件,而不是實際複製的文件。 – imbz 2010-02-06 01:48:31

回答

3

你可以用一個叫做增量建築的概念做到這一點。這個想法是,你將創建一個目標,然後指定輸入和輸出,這將是文件。 MSBuild會將輸入文件的時間戳與輸出文件進行比較。如果所有輸出都是在所有輸出之後創建的,則跳過目標。如果所有輸入都更新,則所有文件都將執行所有目標。如果只有一部分過期,那麼只有那些部分會傳遞給目標。欲瞭解更多信息,請參閱在我的文章Best Practices For Creating Reliable Builds, Part 2中使用增量版本

而且對MSBuild的更多的資源,我在http://sedotech.com/Resources#MSBuild

+0

謝謝,這正是我所期待的。 – imbz 2010-02-08 20:26:24

+0

是的,謝謝,我的問題也排序:) – Mark 2010-12-23 05:53:23

0

它可能是你複製到一個空目標執行SQL腳本?

SkipUnchangedFiles

If true, skips the copying of files that are unchanged 
between the source and destination. The Copy task considers 
files to be unchanged if they have the same size and the 
same last modified time. 

在你的情況我懷疑,被認爲是所有文件的改變,因爲它們根本不存在目標。

+1

否,複製任務報告所有嘗試複製的文件,而不僅僅是實際複製的文件。這是我在搜索interwebs時看到的一個已知問題。 – imbz 2010-02-08 20:24:49

+0

@imbz - 當它!你是對的 - 我從來沒有聽說過這個愚蠢的錯誤。 – Filburt 2010-02-09 17:25:23

3
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="RunScripts"> 

    <Import Project="$(MSBuildExtensionsPath)\ExtensionPack\MSBuild.ExtensionPack.tasks"/> 

    <PropertyGroup> 
    <ConnStr>Server=Example;Database=Example;Trusted_Connection=True</ConnStr> 
    <BuildFolder>Build\</BuildFolder> 
    </PropertyGroup> 

    <ItemGroup> 
    <Scripts Include="*.sql"/> 
    </ItemGroup> 

    <Target Name="RunScripts" 
      Inputs="@(Scripts)" 
      Outputs="@(Scripts->'$(BuildFolder)%(Filename)%(Extension)')"> 
    <SqlExecute TaskAction="ExecuteScalar" 
       Files="@(Scripts)" 
       ConnectionString="$(ConnStr)"/> 
    <Copy SourceFiles="@(Scripts)" 
      DestinationFiles="@(Scripts->'$(BuildFolder)%(Filename)%(Extension)')"/> 
    </Target> 
</Project> 
+0

這是如何與Data Dude一起解決問題。如果MS將提供「開箱即用」的任務,那將會很好。 – Raffaeu 2012-01-06 13:25:40