HOW TO:在命令提示字元進行編譯

更新: 2008 年 7 月

有幾種方式可以在命令提示字元編譯 .NET Compact Framework 應用程式:這些控制項包括下列各項:

  • 使用 Microsoft Build Engine (MSBuild)。

  • 使用批次 (Batch) 檔。

這兩種方法都使用 Windows Software Development Kit (SDK) 所提供的 Visual C# 和 Visual Basic 編譯器。不過,MSBuild 需要目前只有 Visual Studio 提供的 .targets 檔案。

使用 MSBuild 編譯

使用 MSBuild 從命令提示字元建置

  1. 請確定 MSBuild.exe 在您的系統路徑中。

    MSBuild.exe 位於 %systemroot%\Microsoft.NET\Framework\version。系統路徑變數必須包含這個路徑。

  2. 在命令提示字元中,巡覽至 .NET Compact Framework 應用程式專案檔所在的目錄。專案檔的副檔名為 .sln、.vbproj 或 .csproj。

  3. 輸入下列命令。

    msbuild.exe projectname
    

    命令提示字元視窗會提供關於建置程序的資訊。

使用批次檔進行編譯

您可以使用批次檔將 .NET Compact Framework 組件當做目標,而不是以完整的 .NET Framework (桌上型電腦) 組件當做目標。可以直接使用批次檔,或是從 Make 檔公用程式叫用,將 .NET Compact Framework 整合至企業建置系統之中。

批此檔會包含下列資訊:

  • 指向 .NET Compact Framework 組件位置的路徑變數。以下範例使用 NETCF_PATH。

    注意事項:

    或者,您可以在 Make 檔中指定此路徑,或是在 [我的電腦] 的 [內容] 對話方塊中,將路徑指定為環境變數。

  • 視需要參考組件。您要使用 -r 參數,並將組件串連至變數中。

  • 編譯器指令結合適當的參數及引數,如本主題稍後的「編譯器參數」一節中所述。引數包括變數參考和可用來合併其他引數的星號 (*)。

若要建立編譯用的批次檔

  1. 如下例所示,針對您所偏好的程式設計語言在文字編輯器中建立新檔,並加入範例批次檔的內容。

  2. 視需要調整 NETCF_PATH 變數。

    根據預設,.NET Compact Framework 組件位於 C:\Program Files\Microsoft.NET\SDK\version\CompactFramework\WindowsCE 資料夾。

    注意事項:

    如果您使用 Visual Studio 2008 隨附的 .NET Compact Framework,則組件會在 C:\Program Files\Visual Studio version\SmartDevices\SDK\CompactFramework\version\WindowsCE 中。

  3. 儲存和命名檔案,例如對 Visual Basic 批次檔使用 vbcc.bat,或是對 C# 批次檔使用 cscc.bat。

使用批次檔編譯應用程式

  1. 請確定您的系統路徑有包含 .NET Framework。

    Visual Basic 編譯器 (vbc.exe) 和 Visual C# 編譯器 (csc.exe) 位於 %systemroot%\Microsoft.NET\Framework\version 資料夾中。系統路徑變數必須包含這個路徑。

  2. 在命令提示字元,輸入批次檔的名稱,並後接原始程式檔 (Source File),例如:

    vbcc myapp.vb
    

    原始程式檔必須具有 .cs 或 .vb 副檔名,這會根據要使用的編譯器來決定。

會將可複製到裝置或模擬器上的可執行檔建置到目前的目錄。

C# 編譯的批次檔

以下是用於 C# 編譯的範例批次檔:

@echo off

if "%NETCF_PATH%" == "" (
  set NETCF_PATH=c:\Program Files\Microsoft.NET\SDK\v3.5\CompactFramework\WindowsCE)

if DEFINED REF ( set REF= )

set REF=%REF% "/r:%NETCF_PATH%\MsCorlib.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Data.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Drawing.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Messaging.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Net.IrDA.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Web.Services.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Windows.Forms.DataGrid.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Windows.Forms.dll"
set REF=%REF% "/r:%NETCF_PATH%\Microsoft.WindowsCE.Forms.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Xml.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.ServiceModel.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Xml.Xlinq.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Data.Entity.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Runtime.Serialization.dll"
set REF=%REF% "/r:%NETCF_PATH%\Microsoft.WindowsMobile.DirectX.dll"
set REF=%REF% "/r:%NETCF_PATH%\Microsoft.ServiceModel.Channels.Mail.dll"
set REF=%REF% "/r:%NETCF_PATH%\Microsoft.ServiceModel.Channels.Mail.WindowsMobile.dll"

csc -nostdlib -noconfig %REF% %*

Visual Basic 編譯的批次檔

以下是用於 Visual Basic 編譯的範例批次檔:

@echo off

rem Verify the path is correct.
if "%NETCF_PATH%" == "" (
  set NETCF_PATH=c:\Program Files\Microsoft.NET\SDK\v3.5\CompactFramework\WindowsCE)
set SDK_PATH="%NETCF_PATH%"

if DEFINED REF ( set REF= )

set REF=%REF% "/r:%NETCF_PATH%\System.Data.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Drawing.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Messaging.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Net.IrDA.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Web.Services.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Windows.Forms.DataGrid.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Windows.Forms.dll"
set REF=%REF% "/r:%NETCF_PATH%\Microsoft.WindowsCE.Forms.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Xml.dll"
set REF=%REF% "/r:%NETCF_PATH%\Microsoft.VisualBasic.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.ServiceModel.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Xml.Xlinq.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Data.Entity.dll"
set REF=%REF% "/r:%NETCF_PATH%\System.Runtime.Serialization.dll"
set REF=%REF% "/r:%NETCF_PATH%\Microsoft.WindowsMobile.DirectX.dll"
set REF=%REF% "/r:%NETCF_PATH%\Microsoft.ServiceModel.Channels.Mail.dll"
set REF=%REF% "/r:%NETCF_PATH%\Microsoft.ServiceModel.Channels.Mail.WindowsMobile.dll"

set IMP= /Imports:Microsoft.VisualBasic,System,System.Data,System.Drawing,System.Windows.Forms

vbc -sdkpath:%SDK_PATH% -netcf -noconfig -nostdlib %IMP% %REF% %*

編譯器參數

下表描述編譯器參數和引數。

參數

說明

-r

視需要參考組件。

您可以設定環境變數 (例如 REF),以指定組件。依預設值,會參考多數的 .NET Compact Framework 組件。

C# 需要 Mscorlib.dll 的明確參考,Visual Basic 則使用 -sdkpath 參數找到該檔案。

-imports

Visual Basic 需要下列命名空間的明確匯入。

  • Microsoft.VisualBasic

  • System.System.Data

  • System.Drawing

  • System.Windows.Forms

-nostdlb

指示 Visual C# 編譯器忽略完整 (桌上型電腦) .NET Framework 的組件。在 Visual Basic 編譯器中,這麼做可防止編譯器讀取 Vbc.rsp 檔。

-netcf

指示 Visual Basic 編譯器忽略完整 (桌上型電腦) .NET Framework 的組件。

-noconfig

必要項。

-sdkpath

讓 Visual Basic 找到 Mscorlib.dll 的必要項。

請參閱

其他資源

在 .NET Compact Framework 中建置應用程式和核心工作

變更記錄

日期

記錄

原因

2008 年 7 月

加入必須透過安裝 Visual Studio 取得 .targets 檔案的需求資訊。

內容 Bug 修正。