Windows CE程序集使用的.NET运行时版本是否必须与CF版本匹配?

时间:2014-04-29 20:54:05

标签: reflection windows-runtime compact-framework windows-ce ilspy

想知道是否有一个工具可以告诉我哪个版本的紧凑框架用于构建我们已经离职/绝对的前同事留下的exe文件,我发现this

我按照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),它给了我这个:

enter image description here

...但是刚刚把我带到here并且搜索“CF 1.0.3316.00”似乎让人感到困惑。

更新3

奇怪的是,dotPeek声称这个应用程序的.Net Framework是v4.5 ......?!

更新4

我有三个不同的故事:有问题的.exe使用哪个DLL。

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

设备上的DLL,位于\ Program Files \ HHS:

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

所有三个列表中唯一的一个是 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 

所以我所拥有的是一个具有CF 1.0.3316.00的设备,该.exe运行在该设备上(因为它针对版本1,我猜,虽然版本#s不完全匹配),而另一个设备有CF版本2和3.5,但这个.exe既不运行,也不基于针对版本2的相同代码。

更新6

使用.NET Reflector导出一些by-it反汇编的源代码。它遇到了一些无法自动解析引用程序集的情况:

enter image description here

对于前几个实例,我能够找到文件并添加它们。但是对于“system.windows.forms.datagrid”,没有 - 他们不在我的系统上。

在这种情况下我应该“跳过”,否则会阻止我构建反汇编的源代码(我假设需要“system.windows.form.datagrid”,否则它将被“取消引用”退出项目)?

我继续跳过,因为我无法访问这两个文件:

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

跳过这些文件后,我打开了创建的源Reflector。该项目清理得很好;当我尝试构建时,它向我提供了一个保存sln文件的对话框(Reflector只生成了一个csproj文件)。

构建失败并出现35个错误,例如:“意外字符$ ”:

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

3090上也不存在这两个丢失的文件!它们是如何构建/反汇编的,但是甚至不存在于运行.exe的设备上?

1 个答案:

答案 0 :(得分:2)

使用.NET Reflector并在参考资料中查看程序集正在使用的mscorlib版本。

这个程序集使用了2.0的CF(我可以通过公钥令牌告诉它的CF而不是桌面或单声道):

enter image description here

和3.5相同的程序集构建:

enter image description here