içine paketlenmelidir. Ben ayıklayıcıya içindeki .NET Framework 4 ile bu uyguladiinizdaSecurityException: eCall yöntemleri I aşağıdakine benzer bir (C#) işlevi vardır bir sistem modülünden
private static bool SpecialCase = false;
public void Foo()
{
if (SpecialCase)
{
InternalMethod();
return;
}
Console.WriteLine();
}
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void InternalMethod();
, yöntem başarıyla konsolu ve döner boş satır yazdırır. Ben ayıklayıcısını dışında çalıştırmak, o aşağıdaki iletiyle bir istisna atar:
System.Security.SecurityException: ECall methods must be packaged into a system module.
O JIT derleyicisi (varsa) InternalMethod
çağrıldığında aksine yöntemini derlediğinde istisnası atılır görünür. CLI'ye SecurityException
'u atmamasını ya da yöntemin gerçekte aranana kadar istisnayı geciktirmesini söyleyebildiğim bir şey var mı (ör. Öznitelikler) var mı?
Kullanım durumuyla ilgili yan not: Microsoft .NET Framework ile çalışırken SpecialCase
alanı etkili bir şekilde yanlıştır ve CLI'nin farklı (belirli) bir uygulamasında çalışırken doğrudur. Microsoft .NET Framework altında çalışırken, InternalMethod
numaralı çağrı etkili bir şekilde erişilemiyor.
normal bir yöntemle sarın miyim? – SLaks
Evet, aşağıdaki gibi bir sarmalayıcı yöntemini çağırmanın istisnayı ortadan kaldırdığı anlaşılıyor. Olumsuz olan bu uygulama zaten karmaşık bir algoritmada daha da karmaşık kod yollarına yol açacaktır, bu yüzden bir tane bulunabiliyorsa daha temiz bir çözüm tercih ederim. özel statik boşluk InternalMethodWrapper() {InternalMethod(); } ' –
BTW Bu' NET 4.5.2' ancak her iki çerçeveler içinde (her iki çerçeveler yine aynı 'CLR' vardır) sadece Release' Debug'' de, çalıştığınız düşünün vermedi 'in' Debug' modu da olur ? –