这似乎解决了我最近在尝试在各种设备上整理不同版本的CF时感到头疼和头疼的问题,这样它们就可以运行我的CE/CF应用程序。这些痛苦可以在这里和这里读到。
该链接显示了一种方法,可以让为旧版本的CF构建的应用程序在安装了新版本的设备上运行。但上面写着:
"确定当前安装的版本在Pocket PC上,使用文件资源管理器导航到\Windows目录,然后点击cgacutil文件。此时会出现一个消息框,其中包含设备上安装的.NET Compact Framework版本。">
然而,Windows资源管理器(我的摩托罗拉3190设备上没有"文件资源管理器")在Windows文件夹中没有显示"cgacutil"。文件夹的文件居民从"ceconfig"变为"charset",其间没有"cg*"。
链接到上面的URL还说:
"将应用程序设置为在3.5版上运行确定设备上运行的.NET Compact Framework的版本号。">
我该如何确定?一旦我知道了,我就可以在手持设备上添加一个名为[appName].exe.config的文件,其中包含以下数据,所有这些都将是彩虹炖菜/大冰糖山:
<configuration>
<runtime>
<compatibilityversion major="2" minor="0"/>
</runtime>
<startup>
<supportedRuntime version="v3.5.7000"/> // <= what value should this be/what is on my device?
</startup>
</configuration>
但是"v3.5.7000"实际上应该是什么?我需要知道如何确定版本值。
在系统属性中,我可以看到一些操作系统信息,但不能看到CF版本。例如,我看到:
MS Windows CE 6.00版
更新
四处搜寻,我注意到设备上有一个名为"Microsoft.NETCF2.0.LOG.TXT"的文件
文件名表示安装了IS 2.0 的CF版本
因此,由于在另一台设备上工作的.exe似乎是CF 1,我可以将其用作[appName].exe.config文件的内容吗(文件中的内容更具体地说是版本号):
<configuration>
<runtime>
<compatibilityversion major="1" minor="0"/>
</runtime>
<startup>
<supportedRuntime version="v2.0.7045.00"/>
</startup>
</configuration>
这有帮助吗?
更新2
文件"Microsoft.NET CF 2.0.LOG文件包含一些有趣的信息:
25/04/2014 16:50:32: Entered Install_Init().
First Call: Yes
Previously Installed: No
Installation folder is: 'Windows'.
25/04/2014 16:50:32: Build 2.0.7045.00 created on Feb 13 2007 at 22:23:41
25/04/2014 16:50:32: Device CPU: 'ARMV4I', 05020000 (84017152)
25/04/2014 16:50:32: MOTOROLA WinCE 6.00
25/04/2014 16:50:32: AKU string : ''
25/04/2014 16:50:32: OEM info : 'MOTOROLA MC3100R'
25/04/2014 16:50:32: Our trust level is: 2
. . .
25/04/2014 16:50:32: Invoker's command line: '/noui WindowsNETCFV2.wce5.armv4i.cab'
25/04/2014 16:50:32: Memory status, K --------------------------
25/04/2014 16:50:32: Load : 35
25/04/2014 16:50:32: Physical : 55616
25/04/2014 16:50:32: Physical free : 36440
25/04/2014 16:50:32: Virtual : 1048576
25/04/2014 16:50:32: Virtual free : 1047936
25/04/2014 16:50:32: Storage status, K -------------------------
25/04/2014 16:50:32: Available to us: 17020
25/04/2014 16:50:32: Total storage : 30080
25/04/2014 16:50:32: Available total: 17020
25/04/2014 16:50:32: -------------------------------------------
25/04/2014 16:50:32: About to process registry.
25/04/2014 16:50:32: Opened CF registry key OK.
25/04/2014 16:50:32: Looking for upgradeable installations for version '2.0.7045.00'
25/04/2014 16:50:32: Got version value '3.5.7338.00'
25/04/2014 16:50:32: Side by side version '3.5.7338.00' found and skipped.
25/04/2014 16:50:32: Added new CF version value '2.0.7045.00'.
25/04/2014 16:50:32: CF registry key closed.
25/04/2014 16:50:36: Entered Install_Exit().
Failed Dirs: 0
Failed Files: 0
Failed RegKeys: 0
Failed RegVals: 0
Failed Shortcuts: 0
. . .
25/04/2014 16:50:36: Processing alternative file: 'Windows.NET CF 2.0cgacutil.exe.-500~-500~ARMV4I'.
25/04/2014 16:50:36: Special file extension: '.-500~-500~ARMV4I'.
25/04/2014 16:50:36: File is intended for OS: -500 to -500, CPU: ARMV4I
25/04/2014 16:50:36: Device CPU: 'ARMV4I', 05020000 (84017152)
25/04/2014 16:50:36: CPU matches.
25/04/2014 16:50:36: Version MIN ignored.
25/04/2014 16:50:36: Version MAX ignored.
25/04/2014 16:50:36: Querying version of file 'Windows.NET CF 2.0cgacutil.exe.-500~-500~ARMV4I'.
25/04/2014 16:50:36: Version determined to be: 2.0.7045.0.
25/04/2014 16:50:36: Get version completed.
25/04/2014 16:50:36: Querying version of file 'Windowscgacutil.exe'.
25/04/2014 16:50:36: Version determined to be: 3.5.7283.0.
25/04/2014 16:50:36: Get version completed.
25/04/2014 16:50:36: Suggestion: do not overwrite.
25/04/2014 16:50:36: Delete file 'Windows.NET CF 2.0cgacutil.exe.-500~-500~ARMV4I': done.
25/04/2014 16:50:36: Processing alternative file: 'Windows.NET CF 2.0mscoree.dll.-500~-500~ARMV4I'.
. . .
25/04/2014 16:50:36: Adding file 'mscorlib.dll': added.
25/04/2014 16:50:36: Adding file 'system.dll': added.
25/04/2014 16:50:36: Adding file 'system.drawing.dll': added.
25/04/2014 16:50:36: Adding file 'system.messaging.dll': added.
25/04/2014 16:50:36: Adding file 'system.web.services.dll': added.
25/04/2014 16:50:36: Adding file 'system.windows.forms.dll': added.
25/04/2014 16:50:36: Adding file 'system.windows.forms.datagrid.dll': added.
25/04/2014 16:50:36: Adding file 'system.xml.dll': added.
25/04/2014 16:50:36: Adding file 'system.net.irda.dll': added.
25/04/2014 16:50:36: Adding file 'system.data.dll': added.
25/04/2014 16:50:36: Adding file 'microsoft.visualbasic.dll': added.
25/04/2014 16:50:36: Adding file 'microsoft.windowsce.forms.dll': added.
25/04/2014 16:50:36: Adding file 'Microsoft.WindowsMobile.DirectX.dll': added.
25/04/2014 16:50:36: Adding file 'CustomMarshalers.dll': added
因此,新设备同时安装了2.0.7045.0版本和3.5.7283.0版本。
根据Windows\cgacutil.exe运行时显示的内容,旧设备已安装1.0.3316.00。
有问题的项目的框架版本设置为"v2.0">
遗留设备在旧设备上运行,但不在新设备上运行。。。???
源代码的新构建在两者上都不运行。由于它的目标是Framework 2.0版,我现在明白了为什么新版本不会在旧设备上运行。但为什么不在新的上呢?它安装了CF 2,这与项目目标的框架版本相对应。。。
更新3
我将文件[appName].exe.config复制到手持设备上,与.exe 位于同一文件夹中
这是一款较新的(摩托罗拉3190)设备,据说它同时安装了CF版本2.*和3.5*。
尝试运行遗留的(据说是为CF 1.0*构建的)exe确实与那里的exe.config文件有不同的行为。我得到的不是一个永恒的沙漏:
**.NET CF Initialization Error**
to run this application, you must first install one of the following versions of the .NET Compact Framework:
v2.0.7045.00
Contact your application publisher for instructions about obtaining the appropriate version of the .NET Compact Framework.
所以它告诉我联系自己,这没有多大用处。
为什么文本文件表明我安装了v2.0.7045.00,而这表明我没有安装它?
更新4
文本文件表明设备上安装了2.*版本,但尝试运行最新版本("v2.0"属性为"Framework version")却无法运行,这真的让我感到可怕/沮丧。没有bla.exe.config文件的沙漏失败,并显示上面的错误消息。。。?!?
更新5
我还将该应用程序的最新版本(针对Framework版本2)复制到较旧的设备(安装了Framework 1的设备)。我在那里添加了一个[appName].exe.config和.exe,其中包含以下内容:
<configuration>
<runtime>
<compatibilityversion major="2" minor="0"/>
v2.0.7045.00
</runtime>
<startup>
<supportedRuntime version="1.0.3316.00"/>
</startup>
</configuration>
但尝试运行.exe只会导致一个瞬间的沙漏——没有错误消息,但也没有乐趣。
更新6
经过进一步的实验,我接受了这个有相反问题的项目(Framework版本是v3.5,将在较新的设备上运行,但不会在较旧的设备上),并编辑了它的.csproj文件,将<TargetFrameworkVersion>
从"v3.5"()更改为"v2.0">
然而,这并没有帮助——该版本也不能在(旧的)手持设备上运行。。。
不过,错误消息告诉我,我以前从未需要创建Framework 1.0版本的构建,因为我甚至在开发机器上都没有这样的构建(但我以前构建过我们的遗留应用程序的版本,确实在这两种设备上运行)。因此,设备本身似乎被"搞砸了"(Compact Framework的新版本已被旧版本取代)。
更新7
注意:通过.csproj文件将Framework版本从"v3.5"更改为"v2.0"后,在较新设备上运行的小型.exe/实用程序仍然可以运行
更新8
为了进一步澄清(混乱?)发生了什么:
3090 Symbol手持设备已安装CF版本1.0.3316.00(根据Windows\cgacutil.exe)
3190摩托罗拉手持设备没有Windows\cgacutil.exe,但有一个文件表明其上安装了"2.0.7045.00"one_answers"3.5.7338.00"两个版本的Compact Framework
最后一个exe是由一位离职的开发人员在一台现已失效的机器上构建的,只在3090上运行。它的目标是CF Framework 1,大概是(因为它运行在安装了该版本CF的设备上)
这种情况很奇怪,因为在他离开之前,我们通过TFS共享代码,我能够在设备上运行组合代码的结果(.exe),他也是。
我的源代码中的最新版本编译/构建,但既不在3090上运行,也不在3190上运行。它针对CF Framework 2.0版
我构建的一个极简主义实用程序仅在3190上运行。它针对CF Framework 2.0版
这一切给了任何人线索吗?
更新9
在下面IowaEric的回答中提到的这个网站上,它说:".NET Compact Framework在每个设备上安装一个名为cgacutil.exe的实用程序。">
我在一台设备上看到了那个文件(cgacutil.exe),但在另一台上看不到。
上面的链接还说,"在掌上电脑或智能手机设备上,你可以使用文件浏览器">
但我也没有看到"文件资源管理器"应用程序[let];我有Windows资源管理器。。。???
更新10
啊哈!如该链接中所述,转到"开始">"运行…">确实有效cgacutil。它告诉我"…[3.5.7283.02.0.7045.0]">
(在3190上;在3090上写着"1.0.3316.00")
更新11
这就是我能够确定的设备上的内容:
OS (Windows CE) version of 3090 == 05.00.1400
OS (Windows CE) version of 3190 == 06.00
CF versions installed on the devices:
Symbol 3090 == 1.0.3316.00
Motorola 3190 == 2.0.7045.0 & 3.5.7283.0
CF Version chart:
1.0.3316.0 == 1.0 SP2
2.0.7045.0 == 2.0 SP2
老实说。我没有看完你的全部问题。但作为对标题问题的回应,请检查这个问题-通过程序检查安装了的.NET Compact Framework的哪些版本
我认为WinMo设备可以安装多个版本的CF。
这个网站有一个小表格,可以帮助您映射CF版本的运行时版本-http://www.christec.co.nz/blog/archives/113
此信息也存储在注册表中。要查看和编辑注册表,你应该在c:\program files\ce tools\bin\中有一个注册表编辑器。我不确定那个路径,因为我现在不在我的开发电脑上。它可能安装在一个windows移动SDK中,也可能是windows ce power toys安装的一部分。谷歌一下,你就会找到它。然后在注册表中搜索其中一个版本号,你就会得到注册表路径。再说一遍,如果我在我的开发机器上,我可以告诉你。如果你还困着,我可以帮你找到。