Просматривая System.Linq.Enumerable
в DotPeek, я замечаю, что некоторые методы имеют [__DynamicallyInvokable]
атрибут.
Какую роль играет этот атрибут? Это что-то добавленное DotPeek или оно играет другую роль, возможно, информируя компилятор о том, как лучше оптимизировать методы?
c#
dynamic-invoke
Джейми Диксон
источник
источник
IReadOnlyCollection<T>
.System.ServiceModel v3
«SBasicHttpBinding.TextEncoding
(который в V4 перешел на новый базовый класс и становитсяHttpBindingBase.TextEncoding
)Ответы:
Он недокументирован, но выглядит как одна из оптимизаций в .NET 4.5. По-видимому, он используется для заполнения информационного кэша типа отражения, что ускоряет выполнение последующего кода отражения на общих типах платформы. Об этом есть комментарий в справочном источнике для System.Reflection.Assembly.cs, свойство RuntimeAssembly.Flags:
Без дальнейших намеков, что может означать «благословенный API». Хотя из контекста ясно, что это будет работать только с типами в самой структуре. Где-то должен быть дополнительный код, который проверяет атрибут, примененный к типам и методам. Не знаю, где это находится, но, учитывая, что для кэширования необходимо иметь представление обо всех типах .NET, я могу думать только о Ngen.exe.
источник
System.ServiceModel 3.0
). Я предполагал, что объединение а-ляmscorlib
ссылки было в игре, но у меня есть много вопросов по моей конкретной проблеме, чтобы все равно поступитьSystem.ServiceModel v3
, она загружается в CLR4 с автоматическим обновлением доSystem.ServiceModel v4
. Самое интересное в том, что .NET 4.5 выполняет обновление на месте дляSystem.ServiceModel
добавления нового базового класса внизу и перемещает свойство на уровень ниже .Я обнаружил, что он используется в
Runtime*Info.IsNonW8PFrameworkAPI()
наборе внутренних методов. Размещение этого атрибута на элементе возвращает IsNonW8PFrameworkAPI ()false
для него и, таким образом, делает элемент доступным в приложениях WinRT и закрываетThe API '...' cannot be used on the current platform.
исключение.Авторы профилировщика должны поместить этот атрибут в элементы, испускаемые их профилировщиком в сборки фреймворка, если они хотят получить к ним доступ в WinRT.
источник
RuntimeAssembly.InvocableAttributeCtorToken
, которые вызываются упомянутымиIsNonW8PFrameworkAPI()
вами методами.