Examinando o System.Linq.Enumerable
DotPeek, percebo que alguns métodos têm um [__DynamicallyInvokable]
atributo.
Que papel esse atributo desempenha? É algo adicionado pelo DotPeek ou desempenha outro papel, talvez informando o compilador sobre a melhor forma de otimizar os métodos?
c#
dynamic-invoke
Jamie Dixon
fonte
fonte
IReadOnlyCollection<T>
.System.ServiceModel v3
'sBasicHttpBinding.TextEncoding
(que na V4 mudou para uma nova classe base e se tornaHttpBindingBase.TextEncoding
)Respostas:
Não está documentado, mas parece uma das otimizações do .NET 4.5. Parece ser usado para preparar o cache de informações do tipo de reflexão, tornando o código de reflexão subsequente em tipos de estrutura comuns mais rápido. Há um comentário sobre isso na propriedade Reference Source for System.Reflection.Assembly.cs, RuntimeAssembly.Flags:
Sem mais dicas, o que uma "API abençoada" pode significar. Embora seja claro, a partir do contexto, isso funcionará apenas em tipos na própria estrutura. Deveria haver um código adicional em algum lugar que verifique o atributo aplicado aos tipos e métodos. Não faço ideia de onde ele está localizado, mas, como seria necessário ter uma visualização de todos os tipos de .NET para ter uma chance de armazenar em cache, só consigo pensar em Ngen.exe.
fonte
System.ServiceModel 3.0
). Eu tinha assumido que a unificação à lamscorlib
referencia estava em jogo, mas ainda tenho muito o que fazer em meu problema específico - relatará e / ou removerá qualquer tom enganoso dos meus comentários no devido tempo ...System.ServiceModel v3
, carrega-a nas atualizações automáticas do CLR4 paraSystem.ServiceModel v4
. A parte divertida é que o .NET 4.5 faz uma atualização no local para os bits deSystem.ServiceModel
soltar em uma nova classe base abaixo e move a propriedade para um nível abaixo .Descobri que é usado no
Runtime*Info.IsNonW8PFrameworkAPI()
conjunto de métodos internos. A colocação desse atributo em um membro faz com que IsNonW8PFrameworkAPI () retornefalse
para ele e, assim, torna o membro disponível nos aplicativos WinRT e fecha aThe API '...' cannot be used on the current platform.
exceção.Os gravadores de criadores de perfil devem colocar esse atributo nos membros emitidos pelo criador de perfil nos assemblies de estrutura, se quiserem acessá-los no WinRT.
fonte
RuntimeAssembly.InvocableAttributeCtorToken
, chamados pelosIsNonW8PFrameworkAPI()
métodos mencionados.