0

亡くなった/棄権した元同僚が残したexe遺物を構築するために使用されたコンパクトフレームワークのバージョンを教えてくれるツールがあるかどうか疑問に思っていたところ、これを見つけまし

tsandhol の推奨に従って ILSpy をダウンロードしましたが、TargetFramework エントリが表示されません。これはそこに含まれるものです(無実であるとされる人を保護するために難読化されたいくつかの文字列):

// C:\HoldingTank\PlatLoca.exe
// HHS, Version=1.4.0.15, Culture=neutral, PublicKeyToken=null

// Entry point: PlatypusLocator.MainApplication.Main
// Architecture: AnyCPU (64-bit preferred)
// Runtime: .NET 1.1

using System;
using System.Reflection;
[assembly: AssemblyVersion("1.4.0.15")]
[assembly: AssemblyCompany("Platypi-R-Us Computerized Systems, Inc.")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCopyright("Copyright 2006-2014 Platyi-R-Us Computerized Systems, Inc. All wrongs reserved.")]
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyDescription("Platypus Finding Software")]
[assembly: AssemblyInformationalVersion("6.4.0")]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]
[assembly: AssemblyProduct("Platypus-Locating Data Processing")]
[assembly: AssemblyTitle("PlatLoca")]
[assembly: AssemblyTrademark("")]

ここに関連する情報は「ランタイム: .NET 1.1」ですか?

このことから、TargetFramework は CF バージョン 1.0.* であると推測できますか?

アップデート

最新かつ最高のアプリ (CF/CE アプリではない) で TargetFramework を取得します。

[assembly: TargetFramework(".NETFramework,Version=v4.5.1", FrameworkDisplayName = ".NET Framework 4.5.1")]

更新 2

別の提案(Corflags)を試してみると、次のようになりました。

ここに画像の説明を入力

...しかし、ここまで来て「CF 1.0.3316.00」を検索すると、混乱するように見えました。

更新 3

奇妙なことに、dotPeek は、このアプリの .Net Framework が v4.5 であると主張しています.?!?

更新 4

問題の .exe がどの DLL を使用しているかについて、3 つの異なる話を聞いています。

dotPeek が示す唯一の参照は次のとおりです。

mscorlib (all of these are version 1.0.50000.0)
System
System.Data
System.Data.SqlServerCe
System.Drawing
System.Windows.Forms
System.Xml

ILSpy が示す参照:

coredll.dll
CoreDll.DLL
CoreDll.dll
HUtilCE
mscorlib
OpenNETCF
OpenNETCF.Windows.Forms
Symbol
Symbol.Barcode
Symbol.StandardForms
System
System.Data
System.Data.Common
System.Data.SqlServerCe
System.Drawing
System.Windows.Forms
System.Windows.Forms.DataGrid
System.Xml

デバイスの \Program Files\HHS にある DLL:

HUtilCE
OpenNETCF
OpenNETCF.Drawing
OpenNETCF.Windows.Forms
Symbol
Symbol.Barcode
Symbol.BarcodeForms
Symbol.Printing
Symbol.StandardForms
System.Data.SqlClient
System.Data.SqlServerCe

3 つのリストすべての中で唯一System.Data.SqlServerCeです。

それ以外の場合、共通点は次のとおりです。

Both in ILSpy and on the device: HUtilCE, OpenNETCF, OpenNETCF.Windows.Forms, Symbol, Symbol.Barcode
Both in dotPeek and ILSpy: System, System.Data, System.Drawing, System.Windows.Forms, and System.Xml

更新 5

ctacke の提案を使用して .NET Reflector を使用すると、問題の .exe が表示されます。

// Assembly Reference mscorlib

Version: 1.0.5000.0 
Name: mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=969db8053d3322ac, Retargetable=Yes 

したがって、私が持っているのは、この.exeが実行されるCF 1.0.3316.00を持つデバイスです(バージョン1をターゲットにしているため、バージョン番号は正確には一致しませんが)、および両方のCFバージョンを持つ別のデバイスです2 および 3.5 ですが、この .exe は実行されず、バージョン 2 を対象とする同じコードに基づくものも実行されません。

更新 6

.NET Reflector を使用して、逆アセンブルされたソース コードをエクスポートする場合。参照されているアセンブリを自動的に解決できない状況がいくつかあります。

ここに画像の説明を入力

この最初の数回のインスタンスでは、ファイルを見つけて追加することができました。ただし、「system.windows.forms.datagrid」については、できません。私のシステムにはありません。

したがって、この場合は「スキップ」する必要がありますか、逆アセンブルされたソースをビルドできなくなります (「system.windows.form.datagrid」が必要であると仮定します。そうしないと、事業)?

次の 2 つのファイルにアクセスできなかったため、スキップしました。

system.windows.forms.datagrid
system.data.common

それらのファイルをスキップした後、作成されたソース Reflector を開きました。プロジェクトはきれいにきれいになりました。ビルドしようとすると、sln ファイルを保存するためのダイアログが表示されました (Reflector は csproj ファイルのみを生成しました)。

ビルドは次のような 35 個のエラーで失敗しました: " Unexpected character $ " ここに:

if (((obj2 = this.fieldList[col - 1]) != null) && ((obj2 = <PrivateImplementationDetails>.$$method0x60002ec-1[obj2]) != null))

これは、欠落している/スキップされたDLLが原因であると思います。

System.Data.Common == version 1.0.5000.0
System.Windows.Forms.DataGrid is also version 1.0.5000.0

これらの 2 つの欠落ファイルは、3090 にも存在しません! ビルド/逆アセンブルする必要があるのに、.exe が実行されるデバイスに存在しないのはどうしてですか?

4

1 に答える 1

2

.NET Reflector を使用して、アセンブリが使用している mscorlib のバージョンを参考文献で調べます。

このアセンブリは 2.0 の CF を使用します (パブリック キー トークンによって、デスクトップや Mono ではなく、CF であることがわかります)。

ここに画像の説明を入力

3.5 に対する同じアセンブリ ビルド:

ここに画像の説明を入力

于 2014-04-30T04:23:51.870 に答える