Версия.NET Runtime, используемая сборкой Windows CE, обязательно соответствует версии CF?
Подумав, есть ли инструмент, который бы сообщал мне, какая версия компактной платформы использовалась для создания exe-реликвии, оставленной нашим покойным / убранным бывшим сотрудником, я нашел это
Я загрузил ILSpy в соответствии с рекомендациями tsandhol, но не вижу записи 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("")]
Так есть ли здесь соответствующая информация "Runtime: .NET 1.1"?
Должен ли я сделать вывод, что TargetFramework был CF версии 1.0.*?
ОБНОВИТЬ
Я получаю TargetFramework для приложения, созданного для самых последних и лучших приложений (не для приложений CF/CE):
[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.
Единственные ссылки, которые показывает 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, я думаю, хотя номера версий не совпадают точно) и другое устройство с обеими версиями CF 2 и 3.5, но на котором не работает ни этот.exe, ни тот, который основан на том же коде, который предназначен для версии 2.
ОБНОВЛЕНИЕ 6
При использовании.NET Reflector для экспорта некоторых разобранных исходных кодов. Он сталкивается с несколькими ситуациями, когда он не может автоматически разрешить ссылочную сборку:
В первые пару случаев я смог найти файлы и добавить их. Для "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?
1 ответ
Используйте.NET Reflector и посмотрите в разделе "Ссылки", какую версию mscorlib использует сборка.
В этой сборке используется 2.0 CF (я могу сказать, что это CF, а не десктоп или моно по токену открытого ключа):
И сборка такая же сборка против 3.5: