Проблема PS и рефлектора

103
01 июня 2021, 14:20

Мне почему-то вдруг стало интересно: "А что у класса System.Management.Automatization.PowerShell (путь к dll - C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\v*версия PS*\System.Management.Automatization.dll) творится в голове?".

Не важно зачем он - важно что он.

Я - как истинный пират - взял рефлектор от JetBrains (dotPeek) и вскрыл эту библиотеку. И как оказалось, ВСЕ методы либо пустые, либо, если они возвращают значение, содержат один коммент: "Stub method (only 'ret' instruction)", - я так понял это какие-то методы-заглушки. И это абсолютно о ВСЕХ классах.

Что это такое и как вообще компилируется "2-й тип (с комментарием)" метода? Что такое и зачем нужны методы-заглушки? Это шифровка dll, баг рефлектора или что?

Answer 1

Это так называемая reference assembly. В них нет имплементаций методов, и только публичные классы. Их придумали для случая, когда одна и та же длл-ка может иметь разные версии (для .NET 4.0, 4.5, 4.6 и т.д.). На этапе сборки ваш проект ссылается на reference assembly, а в рантайме уже ищется нужная длл в системе.

Детальней здесь: https://github.com/dotnet/standard/blob/master/docs/history/evolution-of-design-time-assemblies.md#using-reference-assemblies

Если вы хотите посмотреть на .NET Framework версию System.Management.Automatization.PowerShell ищите ее в GAC.

Answer 2

Это metadata-only сборка. В нет реального кода, и есть только то количество метаданных, которого хватает для компиляции ссылающегося на эту сборку кода.

Реальная сборка с кодом лежит в GAC (например, в C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0__31bf3856ad364e35\System.Management.Automation.dll), и при запуске подтягивается вместо Reference Assembly.

READ ALSO
Unit test ASP.NET Core 2.2 Web API NullReferenceException [дубликат]

Unit test ASP.NET Core 2.2 Web API NullReferenceException [дубликат]

Всем привет! Когда из функции возвращаю:

179
Как передать несколько ролей в JWT токен?

Как передать несколько ролей в JWT токен?

Разбирал пример для входа по JWT токену https://metanitcom/sharp/aspnet5/23

115
В чем разница условия?

В чем разница условия?

Несколько раз натыкался на такую штуку, когда определяют условие пишут так

92
Я не могу понять, что идет не так [закрыт]

Я не могу понять, что идет не так [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

93