【问题标题】:Common C# source code for Windows and Windows Mobile适用于 Windows 和 Windows Mobile 的通用 C# 源代码
【发布时间】:2010-09-24 21:19:22
【问题描述】:

我的目标是构建一个可以在 Windows Mobile 和“普通”桌面 Windows 上运行的 UI 应用程序。优先考虑的是它在 Windows Mobile 下“看起来不错”,而对于桌面 Windows,如果它变形也可以。在我投入几天时间尝试之前,我想知道这是否可能开始。这个问题有几个部分:

  1. .NET Compact Framework 是“普通”(请编辑).NET Framework 的子集吗?如果没有,MSDN 是否有任何关于 .NET Compact Framework 中的类的信息,但在“正常”(再次请编辑)框架中没有?

  2. 共享类的行为在两个框架中是否相同?

  3. 是否可以为两个平台提供一个 Visual Studio 2005 解决方案/项目?如果是,如何设置?

  4. 还有其他的 cmets 和建议吗?有相关链接吗?

【问题讨论】:

  • 这是直接在设备上运行的应用程序,还是网络应用程序?

标签: c# .net winapi windows-mobile compact-framework


【解决方案1】:
  1. CF 包含完整框架 (FFx) 的子集,但它不是纯子集。 CF 中实际上有几样东西在 FFx 中没有,这使得它有点困难。除了最基本的情况外,CF 应用程序也使用 P/Invoke。从桌面到设备的这些调用永远不会相同,因此它们不是直接可移植的(尽管通过一些抽象,您可以拥有一个与平台无关的接口)。
  2. 在大多数情况下,行为是相同的。我见过where it's not 的一些案例,我记得有些事件的顺序并不总是相同,所以请相信但要验证。
  3. 可以通过非常仔细地按摩配置来实现,但我当然不建议这样做。它很难维护并且非常脆弱。而是有两个项目文件,一个用于 CF,一个用于 FFx。无论如何,您可能会有代码文件差异。将代码文件作为链接添加到每个项目,以便它们都使用相同的物理源文件。我建议使用某种形式的 CI 来帮助确保它们始终构建。
  4. 查看Dan Moth's MSDN articleblog entries 共享代码资产。

【讨论】:

  • Dan Moth 文章的链接解决了我的问题。谢谢!
【解决方案2】:

附:我在网上找到了这张海报——它会告诉你所有的 CF 课程。我从 Microsoft 订购了它,因为 Kinkos 想要 65 美元为我打印彩色!微软免费给我寄了几本——我只需要问:

http://www.microsoft.com/downloads/details.aspx?familyid=7B645F3A-6D22-4548-A0D8-C2A27E1917F8&displaylang=en

我把它挂在我的隔间里,当我试图记住可以在哪些命名空间中找到类时,这是天赐之物。

【讨论】:

  • 不完全是答案,但很好的发现。根据内容的价值投票。
【解决方案3】:

很好的多部分问题:

  1. Differences between the Full Framework and the Compact Framework
  2. 上面的文章包含指向有关类行为如何不同的相关文档的链接(在某些情况下肯定会有所不同)
  3. 非常简单!在 Class Library 中创建具有一组基本功能的单个解决方案,然后创建两个客户端项目(一个用于您的桌面应用程序,一个用于 Windows 移动应用程序)。最后,将类库的引用添加到两个客户端项目中。
  4. 根据您正在从事的项目的广度,您可能需要查看Model View Controller pattern。这对您的项目来说可能有点多,但如果您想在项目之间共享 UI 行为,它可以成为救命稻草。

希望有帮助!

【讨论】:

    【解决方案4】:

    CF,通常包含来自常规框架的 的子集 - 但您不能直接从一个上执行代码。此外,不仅仅是一个子集,compact 中可能还有一些常规版本中没有的东西,例如特定于移动设备的 GUI 东西(软键等)——假设你正在编写一个 winform exe,而不是网页(这可能是获得兼容性的最简单方法)。

    通过一些努力,可以共享 逻辑 代码,尤其是实用程序 dll - 但它们需要不同的 csproj 文件(因为它们具有完全不同的编译时“目标”)。为了减少维护,您通常可以通过破解 csproj 使用通配符来作弊,例如来自 here

    <ItemGroup>
      <Compile Include="..\protobuf-net\**\*.cs" />
    </ItemGroup>
    

    对于 UI,事情变得更加棘手。一般来说,期望是为不同的目标设备共享业务逻辑和单独的 UI。

    【讨论】:

    • 业务逻辑是用纯C编写的,可以为任何可以想象的平台重新编译。关键是为 Windows 和 Windows Mobile 提供一个 UI 以减少维护。
    • CF 程序集是可重定向的,因此如果您有一个不直接引用任何设备内容的程序集,它将在桌面上按原样运行 - 根本不需要重新编译。诚然,满足条件而不抛出缺失方法异常的东西是很少见的。
    【解决方案5】:

    1)。有一个紧凑的框架,所以是的;它是完整 .NET 框架的一个子集。我在办公室的墙上贴了一张海报,上面写着一大堆在 CF 中工作的课程……我不记得是否有任何纯粹的 CF,但我想有一定是一些。有几本关于这个主题的好书——我有 Paul Yao 的一本,Andy Wigley 的另一本——都可以在亚马逊上找到。

    2)。据我所知,CF 类和完整框架类的工作方式相同,但需要针对不同的目标进行编译。

    3)。我会冒险猜测,如果您只使用两者通用的类,您可以使用相同的解决方案,但我不知道您必须在多大程度上使其针对紧凑型设备和完整版本进行编译,我也不能完全肯定地说可以做到。我大胆猜测这个过程并不简单。

    4)。去你当地的书店看看我提到的那两本书。就像我说的,我有 Paul Yao 的那个,它似乎涵盖了我能想象到的紧凑型设备所需的大部分内容。

    【讨论】:

    • 你有亚马逊的附属公司吗?如果我买了这本书,一些便士可能会落在你身上:)
    • 很遗憾我没有。将其视为免费赠品,我可以回馈编程社区...
    猜你喜欢
    • 1970-01-01
    • 2012-09-24
    • 2010-10-24
    • 2011-10-15
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多