揭開Visual Studio編譯的神秘面紗:MSBuild

來源:互聯網
上載者:User

我們平時寫完程式以後,在Visual Studio中右擊build,我們的程式就編譯完了。那麼點擊build之後到底發生了什麼事情?如果沒有Visual Studio我們該如何進行編譯?這就是MSBuild提供的功能,下面將以一些例子來一步步的說明它的用法。

情境:

有一個.cs檔案,想用MSBuild將它編譯成一個exe檔案.

using System;

 

namespace MyApp

{


class
Program

{


static
void Main(string[] args)

{

}

}

}

 

實施:

1.建立Project檔案:

用任何的文字編輯器建立一個.proj檔案(在這個例子中是MyApp.proj), 在檔案裡加入如下的內容:

<Project DefaultTargets="Compile"

xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

</Project>

這是一個根節點,後面的步驟中,將在它的下面添加一些子節點。

2.添加項目屬性。

一個項目有很多屬性,比如項目名稱。現在就為這個項目添加一個名稱:

<Project DefaultTargets="Compile"

xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<PropertyGroup>

<appname>MyApp</appname>

</PropertyGroup>

</Project>

從上面的代碼可以看到,屬性都放在PropertyGroup節點中。

appname這個屬性其實類似於一個變數,在檔案的其他的地方可以通過@(appname)來引用它。

所以放在PropertyGroup裡面的節點都相當於一些全域變數,以供在檔案的其他地方使用。

3.添加Item.

下面將要編譯的檔案添加到配置裡面去:

<Project DefaultTargets = "Compile"

xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >

 

<!-- Set the application name as a property -->

<PropertyGroup>

<appname>MyApp</appname>

</PropertyGroup>

 

<ItemGroup>

<CSFile Include = "MyClass.cs"/>

</ItemGroup>

</Project>

可以看到,Item放在ItemGroup節點裡。CSFile也類似於一個變數,在檔案的其他的地方可以通過@(CSFile)來引用它。

4.添加Target.

Target指的是要編譯任務的集合,是Task的容器。

<Project DefaultTargets = "Compile"

xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >

 

<!-- Set the application name as a property -->

<PropertyGroup>

<appname>HelloWorldCS</appname>

</PropertyGroup>

 

<ItemGroup>

<CSFile Include = "MyClass.cs"/>

</ItemGroup>

 

<Target Name="Compile"></Target>

</Project>

 

5.添加Task.

Task是Target的子節點,用來定義一個個具體的編譯任務。

<Project DefaultTargets = "Compile"

xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >

 

<!-- Set the application name as a property -->

<PropertyGroup>

<appname>HelloWorldCS</appname>

</PropertyGroup>

 

<ItemGroup>

<CSFile Include = "MyClass.cs"/>

</ItemGroup>

 

<Target Name="Compile">

<CSC Sources = "@(CSFile)"></CSC>

</Target>

</Project>

 

上面的代碼中,CSC是MSBuild保留字,它會調用csc.exe來進行編譯。

@()裡面用來放Item的集合名字。在這裡放的是第3步中定義的CSFile項。如果在當前Target中有多個CSFile節點,都會被這個CSC 任務處理。

6.添加Task output

Task output指的是一個具體任務的輸出設定。

<Project DefaultTargets = "Compile"

xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >

 

<!-- Set the application name as a property -->

<PropertyGroup>

<appname>HelloWorldCS</appname>

</PropertyGroup>

 

<ItemGroup>

<CSFile Include = "MyClass.cs"/>

</ItemGroup>

 

<Target Name="Compile">

<CSC Sources = "@(CSFile)"

OutputAssembly = "$(appname).exe">

<Output TaskParameter="OutputAssembly"

ItemName="MyClass"/>

</CSC>

</Target>

</Project>

上面代碼中的TaskParameter指定了輸出的檔案名稱,它用的是CSC節點中定義的OutputAssembly屬性的值。
ItemName指定這個Item的名字,在其他地方可以通過@()文法引用這個Item.

7. 添加訊息

如果希望在編譯的過程中,輸出一些訊息來指示編譯的進度。可以對一個Target添加Message.

<Project DefaultTargets = "Compile"

xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >

 

<!-- Set the application name as a property -->

<PropertyGroup>

<appname>MyApp</appname>

</PropertyGroup>

 

<ItemGroup>

<CSFile Include = "MyClass.cs"/>

</ItemGroup>

 

<Target Name="Compile">

<CSC Sources = "@(CSFile)"

OutputAssembly = "$(appname).exe">

<Output TaskParameter="OutputAssembly"

ItemName="MyClass"/>

</CSC>

<Message Text="The output file is @(MyClass)"/>

</Target>

</Project>

可以看到,這段代碼引用了第6步中設定的ItemName

 

執行:

  1. 將MyApp.proj和MyClass.cs放在一個目錄中。

  1. 開啟命令列,執行MSBuild("C:\Windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe" MyApp.proj),執行結果如下:
  2.  

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.