virtualCERCall MDA
The virtualCERCall Assistente de depuração gerenciada (MDA) é ativado sistema autônomo um aviso indicando que um site de telefonar dentro de uma região de execução restrita (CER) gráfico de telefonar se refere a um destino virtual, ou seja, uma telefonar virtual para um método virtual não final ou uma telefonar usando uma interface. O common linguagem tempo de execução (CLR) não pode prever o método de destino dessas chamadas entre a análise de metadados e de linguagem intermediária sozinha.sistema autônomo resultado, o telefonar árvore não pode ser preparado sistema autônomo parte do gráfico CER e anulações de thread na subárvore que não podem ser automatitelefonary bloqueado.Este MDA avisa sobre casos em que uma CER precisará ser estendido por meio de chamadas explícitas para o PrepareMethod uma vez as informações adicionais necessárias para calcular o destino da telefonar do método é conhecido em time de execução.
Sintomas
As CERs não são executados quando um thread é anulado ou um domínio do aplicativo é descarregado.
Causa
Uma CER contém uma telefonar para um método virtual não pode ser preparado automaticamente.
Resolução
De telefonarPrepareMethod para o método virtual.
Efeito sobre o tempo de execução
Este MDA não tem efeito sobre o CLR.
Saída
Method 'MethodWithCer', while executing within a constrained execution region, makes a call
at IL offset 0x0024 to 'VirtualMethod', which is virtual and cannot be prepared automatically
at compile time. The caller must ensure this method is prepared explicitly at
runtime before entering the constrained execution region.
method name="VirtualMethod"
declaringType name="VirtualCERCall+MyClass"
declaringModule name="mda"
callsite name="MethodWithCer" offset="0x0024"
Configuração
<mdaConfig>
<assistants>
< VirtualCERCall />
</assistants>
</mdaConfig>
Exemplo
class MyClass
{
[ReliabilityContract(Consistency.MayCorruptProcess, CER.None)]
virtual void VirtualMethod()
{
...
}
}
class MyDerivedClass : MyClass
{
[ReliabilityContract(Consistency.MayCorruptProcess, CER.None)]
override void VirtualMethod()
{
...
}
}
void MethodWithCer(MyClass object)
{
RuntimeHelpers.PrepareConstrainedRegions();
try
{
...
}
finally
{
// Start of the CER.
// Cannot tell at analysis time whether object is a MyClass
// or a MyDerivedClass, so we do not know which version of
// VirtualMethod we are going to call.
object.VirtualMethod();
}
}
Consulte também
Conceitos
Diagnosticar erros com assistentes de depuração gerenciadas
Visão geral do empacotamento interop