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 從命令提示字元建置
請確定 MSBuild.exe 在您的系統路徑中。
MSBuild.exe 位於 %systemroot%\Microsoft.NET\Framework\version。系統路徑變數必須包含這個路徑。
在命令提示字元中,巡覽至 .NET Compact Framework 應用程式專案檔所在的目錄。專案檔的副檔名為 .sln、.vbproj 或 .csproj。
輸入下列命令。
msbuild.exe projectname
命令提示字元視窗會提供關於建置程序的資訊。
使用批次檔進行編譯
您可以使用批次檔將 .NET Compact Framework 組件當做目標,而不是以完整的 .NET Framework (桌上型電腦) 組件當做目標。可以直接使用批次檔,或是從 Make 檔公用程式叫用,將 .NET Compact Framework 整合至企業建置系統之中。
批此檔會包含下列資訊:
指向 .NET Compact Framework 組件位置的路徑變數。以下範例使用 NETCF_PATH。
注意事項:
或者,您可以在 Make 檔中指定此路徑,或是在 [我的電腦] 的 [內容] 對話方塊中,將路徑指定為環境變數。
視需要參考組件。您要使用 -r 參數,並將組件串連至變數中。
編譯器指令結合適當的參數及引數,如本主題稍後的「編譯器參數」一節中所述。引數包括變數參考和可用來合併其他引數的星號 (*)。
若要建立編譯用的批次檔
如下例所示,針對您所偏好的程式設計語言在文字編輯器中建立新檔,並加入範例批次檔的內容。
視需要調整 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 中。
儲存和命名檔案,例如對 Visual Basic 批次檔使用 vbcc.bat,或是對 C# 批次檔使用 cscc.bat。
使用批次檔編譯應用程式
請確定您的系統路徑有包含 .NET Framework。
Visual Basic 編譯器 (vbc.exe) 和 Visual C# 編譯器 (csc.exe) 位於 %systemroot%\Microsoft.NET\Framework\version 資料夾中。系統路徑變數必須包含這個路徑。
在命令提示字元,輸入批次檔的名稱,並後接原始程式檔 (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 需要下列命名空間的明確匯入。
|
-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 修正。 |