如何编写一个可以在.NET3.5CompactFramework和RegularFramework上运行的类库?

如何编写一个可以在.NET3.5CompactFramework和RegularFramework上运行的类库?,.net,compact-framework,.net,Compact Framework,如何编写一个可以为常规.NET 3.5框架或.NET 3.5 Compact框架重新编译的.NET类库?不幸的是,这两个框架不是二进制兼容的*,但不要因此而停止 在您的解决方案中创建两个项目(一个普通类库项目和一个Compact Framework类库项目),通过单击“添加|现有文件”,然后选中“文件”对话框上的“添加为链接”复选框,将一个项目中的所有文件作为链接添加到另一个项目中 现在您只需要维护一组源代码,但您的解决方案将同时构建两个DLL 如果文件中有任何特定于桌面框架的代码,并且不能在紧

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

不幸的是,这两个框架不是二进制兼容的*,但不要因此而停止

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

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

如果文件中有任何特定于桌面框架的代码,并且不能在紧凑型框架上工作,则可以将其封装在编译器指令中(至少在C#中),如下所示:

#if PocketPC
    // mobile-specific stuff here
#else
    // desktop-specific stuff here
#endif
  • 请注意,尽管不能在移动平台上使用桌面框架二进制文件,但事实并非如此。Compact framework可执行文件可以在桌面上运行。但是,我相当肯定,桌面应用程序不能引用紧凑的框架程序集(尽管我从未尝试过)
> 这两个框架不是二进制兼容的 >

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

  • 为类创建类库 紧凑的框架
  • 添加引用 从你的.exe文件到该库 项目(桌面或移动)
  • 利润 说真的,我不知道为什么最重要的答案如此重要。你根本不需要两个独立的项目。另外,我不喜欢预处理器指令,它们很难看,在使用构建参数时需要更多关于项目的知识。将所有不兼容的部分外包给一个接口(IPlaformServices或诸如此类),或者你甚至可以问:

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

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

    啊,没错+我将修改我的回复。dotnetcf3.5与Desktopversion兼容。在dotnetcf3.7中,它已不再存在,但与silverlight兼容。请参阅以获取详细信息PreProcessor指令意味着如果该平台上不需要(或不支持)代码,则该代码不会在程序集中结束。在紧凑的框架中,这一点很重要,因为您希望使程序集尽可能小。如果磁盘空间和内存是紧迫的问题,那么只需使用一个预处理器命令即可生成IPlatformServices。让它们在整个代码库中乱七八糟是很可怕的,所以我不建议这样做。我已经成功地运行桌面应用程序和ASP.Net站点,它们引用了compact framework程序集很长一段时间了。看起来没什么问题…实际上。。。这是否意味着您必须在目标机器上安装Compact Framework?或者NETCF程序集是否使用桌面框架(如果可用)?否,目标计算机上不需要安装Compact framework。因此,必须使用桌面程序集。我记得MSDN上有一个关于这个问题的非常全面的文档,但我现在找不到它……是的,它只是在CLR的桌面版下运行。因此,如果您要在FF和CF之间共享代码,那么了解它们之间的差异是值得的。我这里有一个非常不完整的列表: