1

我正在将带有 .NET 1.1 的 XP 模式下的 VS 2003 中的旧版 Windows CE / Compact Framework 项目移植到 VS 2008 和 .NET 3.5

由于尝试以手持设备为目标进行调试非常痛苦(我所针对的特定设备没有模拟器,摩托罗拉 3190),我想在目标 Windows CE 和 Winforms 之间切换我的项目(我将调试它作为Winforms 应用程序正常,定期将其设置为 Windows CE 以便构建并下载到设备)。我怎样才能做到这一点?我现在不明白 Visual Studio 如何知道该项目Windows CE / CF 项目。

确实如此,因为项目属性有一个设备选项卡,并且当我按 F5 时,会调用一个仿真器(一种通用的)。

但在项目属性 Application 选项卡上,Target Framework 下拉列表为空白且灰显。输出类型是 Windows 应用程序。我认为目标框架将设置为 Windows CE 或类似的。显然它设置在某个地方,但在哪里?如何在它作为 CE / CF 和作为“普通旧”Winforms 项目运行之间切换?

选择 Project > Change Target Platform 确实将“Windows CE”显示为当前值,但“更改为:”下拉列表仅包含:

Pocket PC 2003
Windows Mobile 5.0 Pocket PC SDK
Windows Mobile 5.0 Smartphone SDK
Windows Mobile 6 Professional SDK

项目属性 Devies 选项卡在“目标设备:”下拉列表中有更多选项,但对我来说似乎没有任何价值。

如果我卸载项目并选择“编辑 bla.csproj,我会在该 .csproj 文件中看到以下条目:

<NativePlatformName>Windows CE</NativePlatformName>
. . .
<PlatformFamilyName>WindowsCE</PlatformFamilyName>
. . .
<Reference Include="Microsoft.WindowsCE.Forms">
  <Name>Microsoft.WindowsCE.Forms</Name>
</Reference>
. . .
<Import Condition="'$(TargetFrameworkVersion)' == 'v3.5'" 
Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

...并且可能至少其中一个在这里很重要(不是双关语),但如果是这样,我应该将其更改为什么,如果我应该更改它,我应该直接还是间接地更改它?如果是后者,怎么做?

更新

尝试将所有 *.cs 和 *.resx 文件添加到 Winforms 项目,并以这种方式攻击二元性,我在某些但不是所有 *.resx 文件上收到以下错误:

Resx 文件无效。ResX 输入无效。找不到 ResX 读取器和写入器类型名称的有效“resheader”标签。

这意味着什么?此处的解决方案C# resx file error : 似乎不适用于我的情况,因为 out-of-kilter / off-the-rails 文件已经具有以下格式:

<resheader name="resmimetype">
  <value>text/microsoft-resx</value>
</resheader>
4

1 回答 1

2

我不再这样做了(见底部的*注),但我曾经将我所有的各种项目都放在一个解决方案下。

  • 我有我的主要 MDI 应用程序项目。

  • 我有 3 个小型单一表单项目(一个在服务器上,以及 2 个不同的标签打印应用程序)

  • 有 2 个 Windows Mobile 项目(一个叫做 Packout,一个叫做 Inspections)

这些项目已经在我的 PC 上共享它们的文件位置,我在其中有一个名为Common的文件夹,其中包含在整个解决方案中使用的类。

截屏

Database.cs上面显示的类为例:无论我的项目是 MDI 窗体、独立窗体还是 Windows Mobile 应用程序,它们通常都将连接到同一个公司数据库。

不要将文件添加到您的项目中(这会制作文件的副本,并将副本放在您的项目中),而是将文件添加为链接

截图添加为链接

我必须承认:在ctacke几年前向我指出之前,我从未注意到Add按钮是一个下拉菜单。

现在,每当您Database.cs在一个项目中编辑此文件时,它会在所有其他链接的项目中自动更新。

警告!

但是,这确实存在问题!

有时,您需要 Windows Mobile 不支持的 Windows 窗体中的内容。听起来很疯狂,但这是真的。Windows Mobile 无法做到这一切。因此,不要被困在为最薄弱的环节(Windows Mobile)编写所有类,而是在类中包含一些#define语句。

下面是一个 WM5 项目的屏幕截图,由于在 Windows Mobile 中没有定义BackgroundWorkerSystem.ComponentModel控件,该项目现在已将代码注释掉:

如果是 ACP_SUITE 的屏幕截图

这对你有什么好处?

现在,您的解决方案中可以有多个项目。根据您要在哪个项目上测试代码,只需右键单击该项目,然后选择Set as StartUp Project

屏幕截图设置为启动

现在,您可以针对基本代码或您喜欢的任何模拟器(只要它不是那些讨厌的 iPhone 和 Android 设备之一)测试和开发 Windows 窗体应用程序,然后切换回您的旧公司 Clunker进行最终测试和罚款调音。

*自从我们获得 VS2010 和 VS2012 以来,我无法将我的所有项目都放在一个解决方案下。但是,大多数文件仍然链接到单独的项目。

于 2013-10-21T20:52:29.627 回答