如何:在命令提示符处进行编译

更新:2007 年 11 月

在命令提示符处编译 .NET Compact Framework 应用程序的方法有两种。这些功能包括:

  • 使用 Microsoft Build Engine (MSBuild)。

  • 使用批处理文件。

这两种方法都使用 Windows 软件开发工具包 (SDK) 提供的 Visual C# 和 Visual Basic 编译器。不过,MSBuild 需要当前仅在 Visual Studio 中提供的 .targets 文件。

使用 MSBuild 进行编译

使用 MSBuild 在命令提示符处进行编译

  1. 确保 MSBuild.exe 位于系统路径中。

    MSBuild.exe 位于 %systemroot%\Microsoft.NET\Framework\版本。系统路径变量必须包括此路径。

  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\版本\CompactFramework\WindowsCE 文件夹中。

    说明:

    如果使用的是 Visual Studio 2008 附带的 .NET Compact Framework,则这些程序集位于 C:\Program Files\Visual Studio 版本\SmartDevices\SDK\CompactFramework\版本\WindowsCE 中。

  3. 保存并命名该文件,例如,可以将 Visual Basic 批处理文件命名为 vbcc.bat,将 C# 批处理文件命名为 cscc.bat。

使用批处理文件编译应用程序

  1. 确保系统路径包含 .NET Framework。

    Visual Basic 编译器 (vbc.exe) 和 Visual C# 编译器 (csc.exe) 位于“%systemroot%\Microsoft.NET\Framework\版本”文件夹中。系统路径变量必须包括此路径。

  2. 在命令提示符下,输入批处理文件的名称并在后面跟上源文件,例如:

    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 修复