Ms build的初體驗
-
Upload
learningtech -
Category
Documents
-
view
173 -
download
3
Transcript of Ms build的初體驗
MsBuild的初體驗2013.08.30
Bryan Lin
Agenda
• Why MsBuild?
• 認識MsBuild
• 範例實作
Why MsBuild?
• 當我們要發佈站台的時候:• 取得最新版本• 所有程式都要 Build過• 更改設定• …(其他步驟 )
• 產出檔案要 publish至對應的目錄
Why MsBuild?
• 有這麼多步驟要做,而且要分別執行,很麻煩。• 有沒有一個方法只執行一次就做完所有動作?• 就是MsBuild了 !
認識MsBuild
• MsBuild是什麼?能做到那些事情?• 是一個 Xml格式的文件• 裡面描述了專案所包含的檔案有哪些,建置的設定等等資訊 (ex. *.csproj檔案 )
• 也可以使用MsBuild來撰寫建置站台所需要的流程
認識MsBuild
• MsBuild的基本框架• MsBuild的內容其實是由一個Project包含著多個Target所組合而成,再依照參數的不同來決定將會執行那些 Target
• 範例如下:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<Message Text="Hello Msbuild!" />
</Target>
</Project>
認識MsBuild
• 在專案檔中我們指定了預設執行的 Target為Build,在 Build之中執行了顯示訊息的任務
• 執行方式:在 Visiual Stuiod Cmd中,執行MsBuild <你的Build檔案>
• 在畫面上輸出Hello Msbuild!
認識MsBuild
• 想執行多個任務,範例如下:
認識MsBuild
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<CallTarget Targets="Step 1"/>
<CallTarget Targets="Step 2"/>
</Target>
<Target Name="Step 1">
<Message Text="Step 1" />
</Target>
<Target Name="Step 2">
<Message Text="Step 2" />
</Target>
</Project>
認識MsBuild
• 想要了解更多有關MsBuild的資訊?• 請洽 http://
msdn.microsoft.com/zh-tw/library/dd393574.aspx
範例實作
• 取得目前專案的 ChangeSet,並將此 ChangeSet寫入AssemblyVersion
範例實作<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectSourceControl>./</ProjectSourceControl>
<VersionTextPath>version.txt</VersionTextPath>
<MajorVersion Condition="$(MajorVersion) == ''">8</MajorVersion>
<MinorVersion Condition="$(MinorVersion) == ''">1</MinorVersion>
<ProgramFiles32 Condition="$(ProgramW6432) != ''">C:\Program Files (x86)</ProgramFiles32>
<ProgramFiles32 Condition="$(ProgramFiles32) == ''">C:\Program Files</ProgramFiles32>
<VS10Dir>$(ProgramFiles32)\Microsoft Visual Studio 10.0</VS10Dir>
<VS11Dir>$(ProgramFiles32)\Microsoft Visual Studio 11.0</VS11Dir>
<TF Condition="Exists('$(VS10Dir)')">"$(VS10Dir)\Common7\IDE\TF.exe"</TF>
<TF Condition="Exists('$(VS11Dir)')">"$(VS11Dir)\Common7\IDE\TF.exe"</TF>
</PropertyGroup>
範例實作 (續 )<Target Name="GetVersion" BeforeTargets="Build" Condition="$(Configuration.Contains('Release'))">
<Message Text="***************** $(Configuration)" Importance="high" />
<Exec Command="$(TF) history /stopafter:1 /noprompt /recursive $(ProjectSourceControl) > $(VersionTextPath)"/>
<PropertyGroup>
<VersionContent>$([System.IO.File]::ReadAllText('$(VersionTextPath)'))</VersionContent>
<CurrentVersion>$([System.Text.RegularExpressions.Regex]::Match($(VersionContent), '-*?\s*(?<version>\d+)\s*(\S*)?\s*((?<year>\d{4})/(?<month>\d{0,2})/(?<day>\d{0,2})).*?$').Groups["version"].Value)</CurrentVersion>
<CurrentVersionYear>$([System.Text.RegularExpressions.Regex]::Match($(VersionContent), '-*?\s*(?<version>\d+)\s*(\S*)?\s*((?<year>\d{4})/(?<month>\d{0,2})/(?<day>\d{0,2})).*?$').Groups["year"].Value)</CurrentVersionYear>
<CurrentVersionMonth>$([System.Text.RegularExpressions.Regex]::Match($(VersionContent), '-*?\s*(?<version>\d+)\s*(\S*)?\s*((?<year>\d{4})/(?<month>\d{0,2})/(?<day>\d{0,2})).*?$').Groups["month"].Value)</CurrentVersionMonth>
<CurrentVersionDay>$([System.Text.RegularExpressions.Regex]::Match($(VersionContent), '-*?\s*(?<version>\d+)\s*(\S*)?\s*((?<year>\d{4})/(?<month>\d{0,2})/(?<day>\d{0,2})).*?$').Groups["day"].Value)</CurrentVersionDay>
<CurrentDate>$([System.DateTime]::Today.ToString("MMdd"))</CurrentDate>
<AssemblyVersion>$(MajorVersion).$(MinorVersion).$(CurrentVersion).$(CurrentVersionMonth)$(CurrentVersionDay)</AssemblyVersion>
</PropertyGroup>
範例實作 (續 )<Delete Files="$(VersionTextPath)" />
<Message Text="***************** $(AssemblyVersion)" Importance="high" />
<Exec Command="ATTRIB -R $(ProjectDir)\Properties\VersionInfo.cs" />
<WriteLinesToFile
Condition=" '$(AssemblyVersion)' != '' " File="$(ProjectDir)\Properties\VersionInfo.cs"
Overwrite="True"
Lines="[assembly: System.Reflection.AssemblyVersion("$(AssemblyVersion)")]
[assembly: System.Reflection.AssemblyFileVersion("$(AssemblyVersion)")]" />
</Target>
</Project>
參考資料http://msdn.microsoft.com/zh-tw/library/dd393574.aspx
http://ithelp.ithome.com.tw/question/10107277?tag=ithome.nq