如何在.NET Framework和.NET Compact Framework上编译库?

7
我正在开发一个技术库类,可以在两种类型的框架(紧凑版或非紧凑版)上使用。
最好的方法是如何开发这样的库?默认使用.NET功能(针对XP嵌入式),并在使用Windows CE时进行限制(使用CF.NET)?
谢谢。
3个回答

4
我通常通过为每个平台创建单独的dll来实现这一点,这样我就可以在可能时使用可用的平台功能(通常两者都不是严格的子集/超集,如果您想要最佳性能等,则以交集为目标过于限制)。
大多数特性确实是共同的,因此具有特定功能的构建符号的#if代码量通常很少。
为避免忘记添加项目文件而出现问题,我在csproj中使用递归通配符,这样所有.cs文件都会自动包含。

这意味着你有两个不同的项目(一个是.NET,一个是CF.NET),都包含相同的源文件,只是项目类型不同?因此,当你修改一个项目时,两个项目都会自动修改? - Arnaud F.
感谢您的解释:),我将基本上通过设备和电池管理来区分这两个框架...(在.NET中比CF.NET更容易) - Arnaud F.
1
Visual Studio让在同一个文件夹中创建两个项目文件变得很麻烦;你有没有找到一种简单的方法来解决这个问题?听起来像是你自己编写了项目文件...我想知道你是怎么做到的... - Qwertie

2
我发现在.NET和.NET CF代码库之间分享库类有两种方法。
代码相同
通常情况下,库可以是相同的,特别是如果它们是基本库,具有计算或业务类,这些类是相同的。对于非UI库来说,这通常是因为.NET CF大多是.NET的子集。
在这种情况下,您只需构建一个设备项目并将其包含到完整的Windows项目中即可。您将收到一个警告,说明您正在加载设备项目,但如果您没有使用任何CF特定的代码,那么这是可以的。
代码非常相似,但不同
在这种情况下,我创建了两个项目和两个程序集。其中一个程序集我使其成为主要程序集,并包含所有使用的文件。在第二个程序集中,我添加了文件链接以将它们包括为引用,因此任何更新都会反映出来。然后,我使用ifdefs来处理可能不同的特殊情况。

在我的情况下,这是一个技术库(小框架),它嵌入了所有需要打开的设备的API。但是,所有这些设备的操作系统版本都不相同(有些在WinCE上,有些在WinMobile上,有些在XP Embedded上),而且某些情况下电池管理也不同,这就是我提出问题的原因。唯一变化的是检查设备电源状态的方式,那么,对于您来说,什么是最好的解决方案?谢谢回复。 - Arnaud F.
首先,由于.NET进行隔离,因此操作系统版本并不重要,因此所有基本功能都可以正常工作。我可能会构建一个CE/WM的程序集作为CE 5.0库,另一个作为XP嵌入式库。然后共享代码并使用ifdef定义任何差异。 - skeeve

1

考虑使用预处理器指令。

您可以为一般的.NET和CF构建相同库的2个版本。

例如:

#if (!COMPACT_FRAMEWORK)
            // some code only for general .NET 
#endif

默认情况下,应该是一个Windows项目(.NET FW)还是一个Smart设备项目(CF.NET FW)? - Arnaud F.
是的,但是在创建时,您首先要选择要使用的项目类型(智能或Windows)。 ;) - Arnaud F.
最终结果是dll,因此不应有任何区别。据我所知,在win/smart设备类库模板上没有区分。 - Incognito

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接