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 框架是 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 反汇编的源代码。它遇到了一些无法自动解析引用程序集的情况:

在此处输入图像描述

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

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

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

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

跳过这些文件后,我打开了创建的源反射器。项目清理干净;当我尝试构建时,它向我显示了一个保存 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 的设备上甚至不存在?

4

1 回答 1

2

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

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

在此处输入图像描述

并且针对 3.5 构建相同的程序集:

在此处输入图像描述

于 2014-04-30T04:23:51.870 回答