65.9K
CodeProject 正在变化。 阅读更多。
Home

无 Visual Studio 的 Windows Mobile 开发

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.90/5 (49投票s)

2008 年 12 月 18 日

CPOL

17分钟阅读

viewsIcon

334272

downloadIcon

1669

一份关于如何为那些无法获得 Visual Studio 的用户搭建 Windows Mobile Professional 开发环境的指南。

引言

MSDN 支持论坛上偶尔会重新出现关于 Windows Mobile 开发所需最小工具集的问题。有时,提问者负担不起可用的最佳开发工具(Visual Studio)。虽然只使用 .NET Framework SDK 也能进行 Windows Mobile 开发,但我直到现在(我通常使用 VS 2008 Professional)才尝试过。我刚刚在一台电脑上全新安装了 Vista,所以我将利用这个干净的状态,尝试在没有 Visual Studio 的情况下进行一些开发,并验证所需的内容。

为什么不使用 Visual Studio Express?

Visual Studio 的 Express 版本是免费的。那么为什么不使用它们呢?原因很简单。目前没有 Visual Studio Express 版本可用于 Compact Framework 或移动设备开发。

本文涵盖内容?

本文的读者应该已经知道如何用 C# 编程,或者有学习该语言的资源。同样,本文的读者应该已经有学习 Windows Mobile 的资源。本文的目的不是教你如何编程。相反,它是一份关于如何搭建和运行 Windows Mobile 开发所需最小工具集的指南。虽然本文提供了在极度预算有限的情况下创建最小开发环境的信息,但如果你能负担 Visual Studio,我不鼓励走这条路。你的时间很宝贵,使用 Visual Studio 将有助于你更有效地利用时间。它提供了许多功能增强,可以极大地提高开发者的生产力。但是,如果你想在不为工具进行经济投资的情况下进行一些 Windows Mobile 开发,请继续阅读。

资源链接

在本文中,我将引用一些你可以免费下载的资源。我已将这些资源的链接列在下面

所需最少软件

目前,你可以选择使用两个框架版本;2.0 Compact Framework 和 3.5 Compact Framework。3.5 Compact Framework 是 2.0 Compact Framework 的超集;它拥有 2.0 Compact Framework 的所有功能以及其他一些功能(如 Windows Communication Foundation 和一些媒体相关功能)。你应该根据你当前的需求和目标设备来选择框架。Windows Mobile 6.0 和 6.1 的 ROM 映像中已包含 2.0 框架。除非我需要 3.5 框架的功能,否则我通常会以 2.0 框架为目标。Windows Mobile 5 设备未预装 2.0 或 3.5 CF,因此无论你选择哪个框架,都需要在设备默认映像之上安装 .NET CF 可再发行组件。

.NET 2.0 和 3.5 SDK 中包含了 Compact Framework,但默认情况下不会安装。对于 2.0 SDK,在安装 SDK 后,Compact Framework 可以在 Compact Framework 目录下的 *NETCFSetupV2.msi* 中找到(*c:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\CompactFramework*)。对于 3.5 SDK,Compact Framework 是一个默认未选中的安装选项。确保在安装时选中它。是的,你可以在同一台计算机上安装这两个框架而不会发生冲突。继续安装这两个框架 SDK 和 Compact Framework。安装完软件后,运行 Windows Update 以确保你已安装该软件发布的任何更新。

这些是 .NET 3.5 Framework 安装的默认设置。请注意,.NET Compact Framework 默认未选中。确保在执行安装时勾选它。

文件位置

安装完 SDK 后,你会想知道一些重要文件的位置。假设你选择了默认安装位置,你可以在以下位置找到你的文件

Resource Location
3.5 Compact Framework 程序集 C:\Program Files\Microsoft.Net\SDK\CompactFramework\v3.5\WindowsCE
2.0 Compact Framework 程序集 C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE
命令行编译器 C:\Windows\Microsoft.NET\Framework\v2.0.50727

编译你的第一个程序

在下一部分,我们将编译一个“Hello World”程序。这里的重点是编译器,而不是代码。因此,我将从一个简单的例子开始。打开记事本,输入以下内容(或从本文包含的代码中复制)

using System;
using System.Drawing;
using System.Windows.Forms;

namespace MyNamespace
{
   class HelloWorldForm : System.Windows.Forms.Form
   {
        Label lblHello;
        Button btnClose;

        public HelloWorldForm()
        {
            this.Text="Hello World Sample";
            btnClose = new Button();
            lblHello = new Label();
            btnClose.Click += new EventHandler(btnClose_Click);
            btnClose.Text="Close";
            btnClose.Location = new Point(10,100);
            btnClose.Size = new Size(200,50);
            lblHello.Text = "Hello World!";
            lblHello.Location = new Point(10, 10);
            lblHello.Size = new Size(200,50);
            SuspendLayout();
            this.Controls.Add(lblHello);
            this.Controls.Add(btnClose);
            ResumeLayout(false);
        }

        void btnClose_Click(object sender, EventArgs args)
        {
            this.Close();
        }

        [MTAThread]
        static void Main()
        {
            HelloWorldForm mainForm = new HelloWorldForm();
            Application.Run( mainForm );
        }
    }
}

将文件保存为 *HelloWorldForm.cs*。

.NET SDK 安装后,会在 Program Files->Microsoft Windows SDK 6.1 中创建一个名为“Cmd Shell”的图标。点击此图标将打开一个命令提示符窗口,其路径变量已设置,以便能找到命令行编译器。点击此图标打开命令提示符,然后导航到你保存源文件的目录。输入以下命令

csc HelloWorldForm.cs

运行后,你会在同一文件夹中得到一个名为 *HelloWorld.exe* 的新文件。继续运行它。你将看到一个简单的窗体,显示文本“Hello World”和一个“关闭”按钮。此可执行文件无法在你的移动设备上运行,因为编译器已将其链接到桌面框架程序集。让我们用适当的方式重新编译它以用于 Compact Framework。我在这篇文章中包含了两个批处理文件,用于针对 2.0 CF 和 3.5 CF 编译项目。如果你将 SDK 安装在非默认位置(或者如果你使用的是 64 位 Windows 版本,则路径会有所不同),则需要更新这些批处理文件。

SET FrameworkAssemblyPath="C:\Program Files\Microsoft.Net\SDK\
				CompactFramework\v3.5\WindowsCE"
REM the following should be on one line but is broken into 
				several lines for readability.
csc.exe /nologo /nostdlib /noconfig /out:HelloWorld.exe
        /r:""%FrameworkAssemblyPath%\mscorlib.dll""
        /r:""%FrameworkAssemblyPath%\System.dll""
        /r:""%FrameworkAssemblyPath%\System.Windows.Forms.dll""
        /r:""%FrameworkAssemblyPath%\System.Drawing.dll""
        HelloWorldForm.cs

我将解释以上所有命令的作用

  • SET FrameworkAssemblyPath="C:\..." - 设置一个变量,指向 Compact Framework 程序集的路径,这样我们就不必一直输入它。
  • csc.exe - C# 编译器。如果这是一个 VB.NET 程序,我将改用 *vbc.exe*。
  • /nologo - 阻止编译器显示版权信息。
  • /nostdlib - 告诉编译器不要链接到标准的桌面程序集。
  • /noconfig - 防止编译器导入与桌面相关的配置。
  • /out:HelloWorld.exe - 要分配给结果程序集的名称。
  • /r:""%FrameworkAssemblyPath%\xxx.dll"" - 告诉编译器链接到特定的程序集。

编译程序后,你将得到一个可在 Windows Mobile 设备上运行的可执行文件。你现在可以运行该程序,它将在桌面上运行。但是,不要草率地得出结论,所有 Compact Framework 程序都将在桌面上运行。

在没有物理设备的情况下测试程序

假设你没有物理 Windows Mobile 设备。你可以从本文顶部的链接下载 Windows Mobile 模拟器。模拟器有多种本地化语言版本。有两种主要方法可以将文件复制到模拟器。一种方法是与模拟器共享一个文件夹,另一种方法是将模拟器连接到 ActiveSync(在 Windows XP 上)或 Windows Mobile Device Center(在 Vista 上)。我将先带你完成共享文件夹的过程。

共享桌面上的文件夹

启动一个 Windows Mobile Professional 模拟器。打开“文件”菜单,然后选择“配置”。在“常规”选项卡的底部有一个名为“共享文件夹”的选项。你可以在此处输入桌面上的一个文件夹路径。选择“确定”后,该文件夹将在模拟器中显示为存储卡。输入你的 .NET CF 可执行文件的路径。在模拟器中,导航到设备上的存储卡并打开你的可执行文件。

在这里,你可以看到我的桌面上的共享文件夹中的 HelloWorld 可执行文件以及模拟器中的同一文件夹。我使用的是日语模拟器(模拟器有多种本地化语言版本)。

将模拟器连接到 Active Sync

要连接正在运行的模拟 Windows Mobile 设备,请选择 Program Files->Windows Mobile 6 SDK->Tools->Device Emulator Manager。你会看到模拟设备已列出。右键单击它,然后选择“Cradle”。片刻之后,打开 Windows 资源管理器时,该设备将显示为一个已连接的设备。然后你可以将程序复制到设备上。

连接到物理设备

对于物理设备,你只需要将你的 Windows Mobile 设备连接到安装了 Active Sync 或 Windows Mobile Device Center 的计算机。你是否与设备建立配对关系并不重要。当你打开文件资源管理器时,设备将可见,你可以直接将程序复制到设备的文件系统中。

运行程序

无论你选择哪种方法将文件传输到设备,现在都可以运行它。继续打开可执行文件。

哎呀!出现错误!“应用程序需要比此设备上安装的 Microsoft® .NET Compact Framework 版本更新的版本。”让我们先验证设备上 Compact Framework 的版本。打开文件资源管理器并导航到 *\Windows* 文件夹。运行 *CGACUTIL.EXE*。它显示只安装了 2.0 框架(或 Windows Mobile 5 设备上是 1.0)。你需要安装相应的框架。

将 3.5 Framework 安装到设备

查看 *c:\Program Files\Microsoft.Net\SDK\CompactFrameowork\v3.5\WindowsCE/*,你将找到几个用于 .NET CF 安装的 CAB 文件。你需要安装名为“*NETCFv35.wm.armv4i.cab*”的文件。将此文件复制到设备的文件系统中,然后使用设备的文件资源管理器打开它进行安装。安装完成后,再次运行 *CGACUTIL.EXE*。它将报告你已安装 3.5 框架。再次尝试运行 HelloWorld 可执行文件。成功!

将 2.0 Framework 安装到设备

如果你已安装 3.5 框架,则无需安装 2.0 框架。如果你想安装 2.0 框架,请查看 *c:\Program Files\Microsoft.NET\SDK\Compact Framework\v2.0\WindowsCE\wce400\armv4/*,你将找到一个名为“*NETCFv2.ppc.armv4.cab*”的 CAB 文件。将此文件复制到设备的 文件系统中,然后使用设备的文件资源管理器打开它进行安装。安装完成后,再次运行 *CGACUTIL.exe* 工具。它将报告你已安装 2.0 框架。如果现在运行 HelloWorld,它将成功。

我们的“Hello World”程序在模拟器上运行。

调试器在哪里?

.NET Framework SDK 中有一个名为 *cordbg.exe* 的命令行调试器。该调试器以前支持连接到智能设备。目前不支持(尽管 MSDN 关于 *cordbg.exe* 的文档可能会暗示其他情况)。由于缺少此调试器,如果你想有效地调试程序,你别无选择,只能购买 Visual Studio。

添加 IDE:SharpDevelop

一个好的 IDE 是开发必备的。而对于你的 Compact Framework 开发,你能免费获得最好的 IDE 将是 SharpDevelop。SharpDevelop 是一个开源的 .NET IDE。SharpDevelop 3.0 版本支持 2.0 和 3.5 Compact Framework。安装 SharpDevelop 后,你还应该确保安装了 .NET 3.5 CF PowerToys。如果在编译 Compact Framework 程序时未安装它们,你将在编译过程中收到一个关于找不到 *CSharp.targets* 的相当模糊的错误。熟悉 Visual Studio 的人不会发现以下对 SharpDevelop 的描述是开创性的;这些功能在 Visual Studio 中也几乎以相同的形式存在。

与命令行相比,在 SharpDevelop 中编译的体验要好得多。你还记得我们在 HelloWorld 程序中必须传递给命令行编译器的无数个 */r* 参数吗?在 SharpDevelop 中,这些引用是图形化管理的,并且最常见的引用将默认自动包含在你的解决方案中。引用表示的屏幕截图如下所示。要将另一个程序集包含在此列表中,请右键单击“引用”文件夹并选择“添加引用”。将出现一个对话框,列出可以添加到项目中的程序集。

SharpDevelop 中的源代码编辑器比标准文本编辑器更舒适。它包含自动完成功能,这在两个方面将非常有帮助:自动完成允许你引用长名称的实体而无需键入实体的完整名称,并且还可以作为对类成员的一种快速参考。

SharpDevelop 使用标签式编辑器界面,允许你在多个打开的文件之间进行工作。

SharpDevelop 还可以处理在 Visual Studio 中构建的解决方案。我下载了 BillLange1968游戏源代码 并在 SharpDevelop 中打开了它。无需任何修改,代码就在 SharpDevelop 中编译并运行。

SharpDevelop 的编辑器窗口,并显示一个自动完成弹出窗口。

使用 SharpDevelop 创建新项目

安装 SharpDvelop 后,你可以通过选择菜单 文件->新建->解决方案 来开始一个新项目。会出现一个对话框,询问你想创建哪种类型的项目。展开此对话框的 C# 部分,然后单击“Compact Framework”。从对话框右上角的下拉列表中选择你希望使用的 Compact Framework 版本,然后输入项目名称。单击“创建”,你的项目就会被创建。项目创建后,如果展开左侧的文件树,你会看到项目中总共有三个文件(*Assembly.cs*、*MainForm.cs* 和 *MainForm.Designer.cs*)。*MainForm.cs* 和 *MainForm.Designer.cs* 都是同一个类的一部分。*MainForm.Designer.cs* 用于存放与窗体布局相关的所有代码,而 *MainForm.cs* 用于存放窗体的逻辑和行为。在其当前状态下,你可以编译并运行此程序(尽管它只会显示一个空白窗体)。

同样,这里的重点是开发环境而不是代码。因此,我们将对代码做一些非常基本的操作。这个窗体将有一个按钮。如果用户单击该按钮,将打开一个对话框,显示“Hello World”文本。打开 *MainForm.cs*,在 `Main` 方法之前,输入以下内容来声明一个按钮

Button btnShowMessage;

打开 *MainForm.Designer.cs* 并导航到 `InitializeComponent` 方法。在该方法的末尾,输入以下内容

btnShowMessage = new System.Windows.Forms.Button();
btnShowMessage.Text="Show Message!";
btnShowMessage.Size = new System.Drawing.Size(220,100);
btnShowMessage.Location = new System.Drawing.Point(10,10);
this.Controls.Add(btnShowMessage);

为了确保你没有犯错,请通过选择菜单 生成->生成解决方案 来编译程序。如果你有任何语法错误,它们将显示在屏幕底部。纠正错误(如果有)后,我们需要向项目中添加另一个窗体,它将成为结果对话框。选择菜单 文件->新建->文件。系统会询问你是要创建独立文件还是项目内文件。选择在项目中创建文件的选项。当“新建文件”对话框打开时,在左侧的“C#”组中选择“Windows 应用程序”,在右侧的模板区域选择“窗体”。将文件名输入为“*MyDialog.cs*”,然后按“创建”。将有两个文件添加到你的项目中:*MyDialog.cs* 和 *MyDialog.Designer.cs*。

打开 *MyDialog.Designer.cs* 并导航到 `InitializeComponent` 方法。在该方法的末尾,输入以下内容

System.Windows.Forms.Label myLabel = new System.Windows.Forms.Label();
myLabel.Text="Hello World";
myLabel.Location = new System.Drawing.Point(10, 10);
myLabel.Size=new System.Drawing.Size(200,40);
this.Controls.Add(myLabel);

保存你的工作,并再次编译以确保没有语法错误。现在我们已经定义了主窗口和对话框。唯一要做的就是添加代码来响应用户按下按钮的操作,显示对话框。回到 *MainForm.cs*。在 `MainForm` 构造函数中,在调用 `InitializeComponent` 之后的那一行,键入以下行

btnShowMessage.Click+= new EventHandler(btnShowMessage_Click);

在构造函数之后,定义一个新方法来响应用户的单击。添加以下代码来创建该方法

 void btnShowMessage_Click(object sender, EventArgs e)
{
    MyDialog md = new MyDialog();
    md.ShowDialog();
}

这就是所需的最后一部分代码。再次编译项目。如果编译无误,则选择调试->运行来运行代码。将出现一个带有按钮的窗口。单击按钮将显示对话框。然而,这个程序是在桌面上运行,而不是在移动设备上。SharpDevelop 目前的一个限制是它无法调试在设备模拟器或实际手机上运行的程序。对于这个程序,在桌面上进行测试并没有多少影响。如果我们编写了一个使用通常不在桌面上实现的功能(例如发送短信)的程序,或者我们进行了 P/Invoke 调用,那么我们就别无选择,只能在实际设备或模拟器中测试程序。

为什么使用 Visual Studio?

如果我将上述说明给某人,然后让他们坐在 Visual Studio 前而不是 SharpDevelop 前,他们将能够非常小幅度地修改程序来执行所有上述步骤。那么,如果他们可以使用免费的 SharpDevelop,为什么还要花钱购买 Visual Studio 呢?虽然这两个 IDE 之间存在许多差异,但这里最重要的差异在于设计时支持和调试功能。在使用 Visual Studio 时,可以通过简单地将按钮从工具面板拖动到模拟屏幕上来向界面添加按钮。该按钮的事件处理程序的创建是通过双击按钮来启动的。而且,在 Visual Studio 中,你可以在设计时看到窗体的外观,而不是等到运行时才看到结果。

(在我看来)在远程设备上缺乏调试能力是使用 SharpDevelop 的一个重大缺点。当你开始编写更复杂的程序时,IDE 将在测试程序方面变得越来越不实用。Visual Studio 可以调试在模拟器或你的 Windows Mobile 设备上运行的程序。如果你对 Windows Mobile 开发是认真的,那么你应该使用 Visual Studio。

当你准备好切换到 Visual Studio 时,请确保你选择适合你想要针对的 Windows Mobile 和 .NET Framework 的版本。Visual Studio 的 Express 版本不能用于移动开发。下面是选项

Visual Studio 版本 支持的 Windows Mobile 版本
Visual Studio .NET 2003 支持 .NET Compact Framework 1.0 for Pocket PC 2002 and Windows Mobile 2003
Visual Studio 2005 Standard Edition 或更高版本 .NET 1.0 and .NET 2.0 from Windows Mobile 2003 to Windows Mobile 6
Visual Studio 2008 Professional .NET 2.0 and 3.5 from Windows Mobile 5 to Windows Mobile 6
Visual Studio Express 2008 不支持任何版本的 Compact Framework 或 Windows Mobile

未来的编辑

如果你觉得我遗漏了重要的信息,请在下面的评论区留言。随着 SharpDevelop 新版本的发布,我预计其功能将不断增强。SharpDevelop 今天的一些限制可能明天就不再是限制了。如果你在发布新版本时遇到差异,我也会很感谢你能在此添加评论来介绍这些进展。

历史

  • 2008 年 12 月 18 日 - 初次发布
  • 2008 年 12 月 23 日 - 添加了文字以强调 Visual Studio Express 不能使用。
  • 2009 年 01 月 08 日 - 添加了 2.0 Framework 的链接。
© . All rights reserved.