これは、さまざまなデバイスでさまざまなバージョンの CF を整理して、すべてのデバイスで CE/CF アプリを実行できるようにするための、私の最近の手作業とヘッドリングに対する解決策のようです。これらの身もだえはこことここで読むことができます。
このリンクは、古いバージョンの CF 用にビルドされたアプリを、新しいバージョンがインストールされているデバイスで実行する方法を示しています。しかし、それは言います:
「現在インストールされているバージョンを確認するには Pocket PC で、エクスプローラーを使用して \Windows ディレクトリに移動し、cgacutil ファイルをタップします。メッセージ ボックスに、デバイスにインストールされている .NET Compact Framework のバージョンが表示されます。」
ただし、Windows エクスプローラー (Motorola 3190 デバイスには "File Explorer" はありません) では、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」は実際には何のはずですか? そのバージョン値を決定する方法を知る必要があります。
システムのプロパティで、OS 情報を確認できますが、CF のバージョンは確認できません。たとえば、次のように表示されます。
MS Windows CE バージョン 6.00
アップデート
調べてみると、「Microsoft .NET CF 2.0.LOG.TXT」という名前のファイルがデバイスにあることに気づきました。
ファイル名は、インストールされている CF バージョンを示します IS 2.0
では、他のデバイスで動作する .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 \Windows\NETCFV2.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.0\cgacutil.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.0\cgacutil.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 '\Windows\cgacutil.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.0\cgacutil.exe.-500~-500~ARMV4I': done.
25/04/2014 16:50:36: Processing alternative file: '\Windows\.NET CF 2.0\mscoree.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 と同じフォルダーにコピーしました。
これは新しい (Motorola 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」を持っている) を実行しようとしても実行に失敗するのは、私にとって本当に恐ろしい/苛立たしいことです。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
さらに実験して、反対の問題 (フレームワーク バージョンは v3.5 で、新しいデバイスでは実行されますが、古いデバイスでは実行されません) をプロジェクトに適用し、その .csproj ファイルを編集して<TargetFrameworkVersion>
、「v3.5」から変更しました () "v2.0" に (最初に "v1.0" に変更しようとしましたが、エラー メッセージが表示されました: "このプロジェクトには、このマシンにインストールされていない .NET Compact Framework v1.0 が必要です。 " v1.0」から「v2.0」
ただし、それは役に立ちませんでした-そのビルドは(古い)ハンドヘルドデバイスでも実行されません...
ただし、エラー メッセージは、フレームワーク バージョン 1.0 のビルドを作成する必要がなかった、ということを示しています。これは、私の開発マシンにもそれがないためです (ただし、実際に両方で実行されるレガシー アプリのバージョンを以前にビルドしたことがあります)。デバイス)。そのため、デバイス自体が「めちゃくちゃ」になっているようです (コンパクト フレームワークの新しいバージョンが古いバージョンに置き換えられました)。
更新 7
注:新しいデバイスで実行される小さな .exe/utility は、.csproj ファイルを使用してフレームワークのバージョンを "v3.5" から "v2.0" に変更した後も実行されます。
更新 8
何が起こっているのかをさらに明確にする(混乱させる?):
3090 Symbol Handheld デバイスには、CF バージョン 1.0.3316.00 がインストールされています (Windows\cgacutil.exe による)。
3190 Motorola ハンドヘルド デバイスには Windows\cgacutil.exe はありませんが、コンパクト フレームワークのバージョン '2.0.7045.00' と '3.5.7338.00' の両方がインストールされていることを示すファイルがあります。
現在は機能していないマシンでビルドされた最後の exe は、3090 でのみ実行されます。おそらくCF Framework 1をターゲットにしています(そのバージョンのCFがインストールされたデバイスで実行されるため)
彼が去る前に、私たちは TFS を介してコードを共有し、結合されたコードの結果 (.exe) をデバイス上で実行できたので、これは非常に奇妙です。彼もそうでした。
ソースからの最新ビルドはコンパイル/ビルドされますが、3090 でも 3190 でも実行されません。CF フレームワーク バージョン 2.0 をターゲットにしています。
私が構築した最小限のユーティリティは、3190 でのみ動作します。CF Framework バージョン 2.0 を対象としています。
これはすべて、誰かに手がかりを与えますか?
更新 9
以下のIowaEricの回答で参照されているこのサイトでは、「.NET Compact Framework は cgacutil.exe というユーティリティを各デバイスにインストールします」と述べています。
そのファイル (cgacutil.exe) が 1 つのデバイスに表示されますが、他のデバイスには表示されません。
上記のリンクには、「Pocket PC または Smartphone デバイスではファイル エクスプローラを使用できます」とも書かれています。
...しかし、「ファイルエクスプローラー」アプリも表示されません[let]; 私はWindowsエクスプローラーを持っています...???
更新 10
あはは!そのリンクで述べたように、[スタート] > [ファイル名を指定して実行...] > [cgacutil] に移動しても機能します。「... [3.5.7283.0、2.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