您是否知道Compact和Full Framework代码之间的任何运行时差异?

时间:2008-12-05 00:55:37

标签: .net compact-framework

这两个版本的.NET之间的兼容代码存在许多运行时差异。

到目前为止,这是一个差异列表:

  • Graphics.DrawRectangle - 相差1像素
  • Graphics.DrawString - 如果与StringFormat一起使用并且StringAlignments都设置为Center,则会丢失换行符。
  • 大多数文件操作 - 紧凑框架需要完整路径
  • The status of a socket after BeginAccept
  • (至少在WinCE 5中)你不能使用套接字与超时同步发送数据(没有问题,但你冒着风险挂起)
  • 位图(真正的所有图像派生类)在how their resources are cleaned up中表现不同。 - ctacke
  • CF中标签和树视图的默认字体较大 - Darwyn
  • 当CF中的标签被禁用时,它只是变灰了(完整的.net framewark用另一种颜色勾勒出文字) - Darwyn
  • 在桌面上以不同的格式从System.Reflection.Assembly.GetExecutingAssembly()返回程序集路径.GetName()。CodeBase - Qwertie

我们是否还有其他要添加的内容?

5 个答案:

答案 0 :(得分:7)

根据您的要求,MSDN上有一篇Differences between .NET Compact Framework and .NET Framework文章。

答案 1 :(得分:2)

从Mitchel Sellers的名单中,这些是使Compact紧张有趣的一些特征......很有趣。

.NET Compact Framework的公共语言运行库大约是完整.NET Framework公共语言运行库大小的12%。

Windows Embedded CE操作系统中不存在当前目录的功能。

Windows Embedded CE将指定的文件名解析为没有路径信息,因为它位于设备的根目录中,而不是在应用程序目录中。

.NET Compact Framework处理以file://为前缀的统一资源标识符(URI)字符串,与完整的.NET Framework不同。

由于大小和性能方面的考虑,.NET Compact Framework不支持使用BinaryFormatter进行二进制序列化,也不支持使用SoapFormatter进行SOAP序列化。

并非所有套接字选项都受支持。

由于设备I / O出现在RAM中,因此无法设置或访问文件和目录属性。


控制台仅在硬件供应商的选项中提供。

只有12%的.NET Framework。我巧妙地发现这意味着88%的缺失。你可能会想要一些。

非常值得注意的是,这么多被省略或扭曲,因为它不适合几百MB;相比之下,传统移动设备通常不到10 MB。

答案 2 :(得分:1)

当我不得不将CF应用程序移植到完整的.net框架时,我注意到了一些差异。

  • CF中标签和树视图的默认字体较大

  • 当CF中的标签被禁用时,它只是变灰了(完整的.net framewark用另一种颜色勾勒出文字)

答案 3 :(得分:1)

位图(真正的所有图像派生类)在how their resources are cleaned up中表现不同。

答案 4 :(得分:1)

的桌面上以不同的格式返回装配路径
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase

这将返回Win CE下的正常路径,但在桌面框架上提供了一个URL(file:/// c:/ ...)。物业

System.Reflection.Assembly.GetExecutingAssembly().Location

在桌面框架中返回正常路径(C:...),但在Compact Framework中根本不可用。

这是一个返回应用程序所在文件夹的属性:

public static string AppFolder
{
    get {
        #if !WindowsCE && !PocketPC
        string exeFile = System.Reflection.Assembly.GetExecutingAssembly().Location;
        #else
        // This returns a normal path under CE, but gives a URL (file:/...) on the desktop
        string exeFile = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase;
        if (exeFile.StartsWith("file:///"))
            exeFile = exeFile.Substring("file:///".Length);
        #endif
        return System.IO.Path.GetDirectoryName(exeFile);
    }
}