如何编写一个可以在.NET 3.5紧凑框架和常规框架上工作的类库?

Chr*_* KL 10 .net compact-framework

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

Mat*_*ton 14

遗憾的是,这两个框架不是二进制兼容*,但不要让它阻止你.

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

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

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

#if PocketPC
    // mobile-specific stuff here
#else
    // desktop-specific stuff here
#endif
Run Code Online (Sandbox Code Playgroud)
  • 请注意,虽然您无法在移动平台上使用桌面框架二进制文件,但情况恰恰相反.紧凑的框架可执行文件可以在桌面上运行.但是,我很确定桌面应用程序无法引用紧凑的框架程序集(尽管我从未尝试过).

  • 我已成功运行桌面应用程序 - 和ASP.Net站点 - 现在已经推出了一段时间的紧凑框架组件.似乎没有任何问题,那就是...... (3认同)

log*_*cnp 5

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

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


Qui*_*ome 5

  1. 为紧凑框架创建一个类库.
  2. 从.exe项目(桌面或移动)添加对该库的引用
  3. 利润!

说真的,我不知道为什么最好的答案是如此顶级.您根本不需要两个单独的项目.此外,我不喜欢预处理器指令,它们很难看,并且在使用构建参数时需要有关项目的其他知识.将所有不兼容的零碎件外包给接口(IPlaformServices等)更加美观,或者您甚至可以问:

   if(Environment.OSVersion.Platform == PlatformID.WinCE)
   {
       // winCE specific     
   }
   else
   {
       // desktop specific
   }
Run Code Online (Sandbox Code Playgroud)

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

  • 预处理程序指令意味着如果在该平台上不需要(或支持)代码,代码不会在程序集中结束.这对于您希望保持组件尽可能小的紧凑框架非常重要. (4认同)