代码之家  ›  专栏  ›  技术社区  ›  Quibblesome

您知道紧凑和完整框架代码之间有什么运行时区别吗?

  •  15
  • Quibblesome  · 技术社区  · 16 年前

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

    以下是迄今为止的差异列表:

    • graphics.drawRectangle-相差1像素
    • graphics.drawstring-如果与stringformat一起使用,且两个stringAlignments都设置为中心,则会丢失换行符。
    • 大多数文件操作-压缩框架需要完整的路径
    • The status of a socket after BeginAccept
    • (至少在WinCE 5中)您不能使用一个套接字在超时的情况下同步发送数据(没有可以,但您有挂起的风险)
    • 位图(所有图像派生类)在 how their resources are cleaned up . -卡塔克
    • CF中标签和树视图的默认字体较大-darwyn
    • 当一个标签在CF中被禁用时,它只是灰显(完整的.NET框架用另一种颜色勾勒出文本的轮廓)-darwyn
    • 程序集路径在桌面上以不同格式从System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase-Qwertie返回

    我们还有什么要补充的吗?

    5 回复  |  直到 16 年前
        1
  •  7
  •   Mitchel Sellers    16 年前

    取决于你要找的是什么 Differences between .NET Compact Framework and .NET Framework 关于msdn的文章。

        2
  •  2
  •   dkretz    16 年前

    从Mitchel Sellers的列表中可以看出,这些特性使得紧凑的程序设计…有趣。

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

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

    Windows Embedded CE解析不包含路径信息的指定文件名,该文件名位于设备的根目录中,而不是应用程序目录中。

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

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

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

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


    控制台仅由硬件供应商提供。

    只有12%的.NET框架。我聪明地发现这意味着88%的人失踪了。你可能会想要一些。

    非常值得注意的是,如此多的数据被忽略或歪曲,因为它不能容纳数百MB;相比之下,传统移动设备通常小于10 MB。

        3
  •  1
  •   Darwyn    16 年前

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

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

    • 当一个标签在CF中被禁用时,它只是灰显(完整的.NET框架用另一种颜色勾勒出文本的轮廓)。

        4
  •  1
  •   ctacke    16 年前

    位图(所有图像派生类)在 how their resources are cleaned up .

        5
  •  1
  •   Qwertie    16 年前

    程序集路径在桌面上以不同的格式返回,从

    System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
    

    这将返回win-ce下的正常路径,但在桌面框架上提供一个URL(file:///c/…)。财产

    System.Reflection.Assembly.GetExecutingAssembly().Location
    

    返回桌面框架中的普通路径(C:…),但在紧凑框架中根本不可用。

    以下是返回应用程序所在文件夹的属性:

    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);
        }
    }