【问题标题】:How to write a class library that will work on .NET 3.5 compact framework AND regular framework?如何编写适用于 .NET 3.5 紧凑框架和常规框架的类库?
【发布时间】:2009-10-10 07:10:00
【问题描述】:

如何编写可以为常规 .NET 3.5 Framework 或 .NET 3.5 Compact Framework 重新编译的 .NET 类库?

【问题讨论】:

    标签: .net compact-framework


    【解决方案1】:

    很遗憾,这两个框架不兼容二进制*,但不要因此而阻止您。

    在您的解决方案中创建两个项目(一个普通类库项目和一个 Compact Framework 类库项目),然后通过单击“添加|”将一个项目中的所有文件作为链接添加到另一个项目中。现有文件”,然后选中文件对话框上的“添加为链接”复选框。

    现在您只需维护一组源代码,但您的解决方案将同时构建两个 DLL。

    如果您的文件中包含特定于桌面框架的任何代码并且不适用于紧凑型框架,您可以将其包装在编译器指令中(至少在 C# 中),如下所示:

    #if PocketPC
        // mobile-specific stuff here
    #else
        // desktop-specific stuff here
    #endif
    
    • 请注意,虽然您不能在移动平台上使用桌面框架二进制文件,但反之则不然。紧凑的框架可执行文件可以在桌面上运行。不过,我相当肯定桌面应用程序无法引用紧凑的框架程序集(尽管我从未尝试过)。

    【讨论】:

    • 我已经成功运行桌面应用程序 - 和 ASP.Net 站点 - 很长一段时间以来都引用了紧凑的框架程序集。似乎没有什么问题……
    • 实际上...这是否意味着您必须在目标机器上安装 Compact Framework?或者 NETCF 程序集是否使用桌面框架(如果可用)?
    • 不,Compact Framework 不需要安装在目标机器上。所以必须使用桌面程序集。我记得 MSDN 上有一个关于这个问题的非常全面的文档,但我现在找不到它......
    • 是的,它只是在 CLR 桌面版下运行。因此,如果您要在两者之间共享代码,则值得了解 FF 和 CF 之间的区别。我在这里有一个非常不完整的列表:stackoverflow.com/questions/342576/…
    【解决方案2】:

    > 这两个框架不是二进制兼容的 >

    实际上桌面版可以加载和运行 CF 程序集。

    【讨论】:

    【解决方案3】:
    1. 为 紧凑的框架。
    2. 添加参考 从您的 .exe 到该库 项目(桌面或移动)
    3. 利润!

    说真的,我不知道为什么最佳答案如此之高。您根本不需要两个单独的项目。此外,我不喜欢预处理器指令,它们很丑陋,并且在使用构建参数时需要有关项目的额外知识。将所有不兼容的点点滴滴都外包给一个接口(IPlaformServices 等)会更漂亮,或者你甚至可以问:

       if(Environment.OSVersion.Platform == PlatformID.WinCE)
       {
           // winCE specific     
       }
       else
       {
           // desktop specific
       }
    

    这两个都是比预处理器指令 IMO 更好的解决方案。

    【讨论】:

    • 预处理器指令意味着如果该平台上不需要(或支持)代码,则该代码不会最终出现在程序集中。这对紧凑型框架很重要,您希望在该框架中尽可能小。
    • 公平点。如果磁盘空间和内存是紧迫的问题,那么只需使用一个预处理器命令来生成您的 IPlatformServices。让它们在整个代码库中乱扔垃圾可能是地狱般的,所以我不推荐这条路线。
    猜你喜欢
    • 1970-01-01
    • 2010-10-17
    • 2011-02-18
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多