如何:在命令提示符处进行编译
更新:2007 年 11 月
在命令提示符处编译 .NET Compact Framework 应用程序的方法有两种。这些功能包括:
使用 Microsoft Build Engine (MSBuild)。
使用批处理文件。
这两种方法都使用 Windows 软件开发工具包 (SDK) 提供的 Visual C# 和 Visual Basic 编译器。不过,MSBuild 需要当前仅在 Visual Studio 中提供的 .targets 文件。
使用 MSBuild 进行编译
使用 MSBuild 在命令提示符处进行编译
确保 MSBuild.exe 位于系统路径中。
MSBuild.exe 位于 %systemroot%\Microsoft.NET\Framework\版本。系统路径变量必须包括此路径。
在命令提示符处,定位到 .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\版本\CompactFramework\WindowsCE 文件夹中。
说明: 如果使用的是 Visual Studio 2008 附带的 .NET Compact Framework,则这些程序集位于 C:\Program Files\Visual Studio 版本\SmartDevices\SDK\CompactFramework\版本\WindowsCE 中。
保存并命名该文件,例如,可以将 Visual Basic 批处理文件命名为 vbcc.bat,将 C# 批处理文件命名为 cscc.bat。
使用批处理文件编译应用程序
确保系统路径包含 .NET Framework。
Visual Basic 编译器 (vbc.exe) 和 Visual C# 编译器 (csc.exe) 位于“%systemroot%\Microsoft.NET\Framework\版本”文件夹中。系统路径变量必须包括此路径。
在命令提示符下,输入批处理文件的名称并在后面跟上源文件,例如:
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 修复 |