代码之家  ›  专栏  ›  技术社区  ›  Ignas Limanauskas

Windows和Windows Mobile的通用C#源代码

  •  6
  • Ignas Limanauskas  · 技术社区  · 16 年前

    我的目标是构建一个具有UI的应用程序,可以在Windows Mobile和“普通”桌面Windows上运行。首要任务是让它在Windows Mobile下“看起来不错”,对于桌面Windows来说,如果它变形了,也没问题。在我投入数天时间尝试之前,我想先听听这是否可行。这个问题有几个部分:

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

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

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

    4. 还有其他意见和建议吗?有相关链接吗?

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

    附言:我在网上找到了这张海报——它会向你展示所有属于CF的课程。我从微软订购了它,因为Kinkos想花65美元为我打印彩色海报!微软免费给我发了几份——我所要做的就是问:

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

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

        3
  •  3
  •   Zachary Yates    16 年前

    很好的多部分问题:

    1. Differences between the Full Framework and the Compact Framework
    2. 上面的文章有关于类行为如何不同的相关文档的链接(在某些情况下确实不同)
    3. 很简单!创建一个具有一组基本功能的单一解决方案 Class Library ,然后创建两个客户端项目(一个用于桌面应用程序,一个用于windows移动应用程序)。最后,将对类库的引用添加到两个客户端项目中。
    4. 根据你正在进行的项目的广度,你可能想看看 Model View Controller pattern 。这对你的项目来说可能有点过分,但如果你想在项目之间共享UI行为,这可能是一个救命稻草。

    希望这能有所帮助!

        4
  •  2
  •   Marc Gravell    16 年前

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

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

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

    对于UI来说,事情变得很复杂。一般来说,期望为不同的目标设备提供共享的业务逻辑和单独的UI。

        5
  •  1
  •   BenAlabaster    16 年前

    1.有一个紧凑的框架,所以是的;它是完整的一个子集。NET框架。我在办公室的墙上贴了一张海报,上面写着一大堆在CF中工作的类……我记不清是否有纯CF的类,但我想肯定有。亚马逊上有几本关于这个主题的好书,一本是保罗·姚的,另一本是安迪·威格利的。

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

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

    4.去你当地的书店浏览一下我提到的那两本书。就像我说的,我有一个保罗·姚的,它似乎涵盖了我在紧凑型设备上所能想象到的大部分内容。