Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makale aşağıdaki derleyici tanılamalarını kapsar:
- CS0193: * veya -> işleci bir işaretçiye uygulanmalıdır
- CS0196: İşaretçi yalnızca bir değerle dizine alınmalıdır
- CS0208: Yönetilen türün adresini alamaz, boyutunu alamaz veya işaretçi bildiremez ('type')
-
CS0209: Bildirilen ifadede yerel bir
fixedtürünün işaretçi türünde olması gerekir -
CS0210:
fixedveyausingdeyimi bildirimi için bir başlatıcı sağlamalısınız - CS0211: Verilen ifadenin adresi alınamıyor
-
CS0212: Yalnızca bir ifade başlatıcısının içinde sabitlenmemiş bir
fixedifadenin adresini alabilirsiniz -
CS0213: Zaten sabit olan bir ifadenin adresini almak için
fixeddeyimini kullanamazsınız - CS0214: İşaretçiler ve sabit boyutlu arabellekler yalnızca güvenli olmayan bir bağlamda kullanılabilir
-
CS0227: Güvenli olmayan kod yalnızca ile derleniyorsa
/unsafegörünebilir - CS0233: 'tanımlayıcı' önceden tanımlanmış bir boyuta sahip olmadığından, sizeof yalnızca güvenli olmayan bir bağlamda kullanılabilir
- CS0242: Söz konusu işlem geçersiz işaretçilerde tanımlanmamış
-
CS0244: İşaretçi türlerinde '
is' veya 'as' geçerli değil - CS0254: Sabit deyim atamasının sağ tarafı bir atama ifadesi olmayabilir
- CS0459: Salt okunur bir yerel değişkenin adresi alınamıyor
- CS0821: Örtük olarak yazılan yerel değişkenler düzeltilemez
- CS1641: Sabit boyutlu arabellek alanı, alan adından sonra dizi boyutu belirticisine sahip olmalıdır
- CS1642: Sabit boyutlu arabellek alanları yalnızca yapıların üyesi olabilir
- CS1656: 'salt okunur değişken türü' olduğundan 'değişken' atanamıyor
-
CS1663: Sabit boyutlu arabellek türü aşağıdakilerden biri olmalıdır:
bool,byte,short,int,long, ,char, ,sbyte,ushort,uintulongfloatveyadouble - CS1664: Uzunluğu 'length' ve türü 'type' olan sabit boyutlu arabellek çok büyük
- CS1665: Sabit boyutlu arabelleklerin uzunluğu sıfırdan büyük olmalıdır
- CS1666: Sabitlenmemiş ifadelerde bulunan sabit boyutlu arabellekleri kullanamazsınız. Sabit deyimini kullanmayı deneyin.
- CS1708: Sabit boyutlu arabelleklere yalnızca yerel ayarlar veya alanlar aracılığıyla erişilebilir
-
CS1716: '
System.Runtime.CompilerServices.FixedBuffer' özniteliğini kullanmayın. Bunun yerine 'sabit' alan değiştiricisini kullanın. - CS1919: Nesne oluşturmada güvenli olmayan tür 'tür adı' kullanılamaz
-
CS4004: Güvenli olmayan bir bağlamda olamaz
await - CS7092: Sabit arabellek yalnızca bir boyuta sahip olabilir.
-
CS8372: Bir özellikte '
System.Runtime.CompilerServices.FixedBuffer' özniteliğini kullanmayın - CS8385: Verilen ifade sabit bir deyimde kullanılamaz
- CS8500: Bu işlem, yönetilen bir türün ('type') adresini alır, boyutunu alır veya işaretçisini bildirir
- CS8812: 'method' &method grubu 'type' işlev dışı işaretçi türüne dönüştürülemiyor.
- CS9049: Sabit alan bir başvuru alanı olmamalıdır.
-
CS9123: '
&' işleci, zaman uyumsuz yöntemlerdeki parametrelerde veya yerel değişkenlerde kullanılmamalıdır. - CS9360: Bu işlem yalnızca güvenli olmayan bir bağlamda kullanılabilir
-
CS9361:
stackallociçindeSkipLocalsInitbaşlatıcı olmayan ifade yalnızca güvenli olmayan bir bağlamda kullanılabilir -
CS9362: 'member' güvenli olmayan bir bağlamda kullanılmalıdır çünkü '
unsafe' olarak işaretlenir - CS9363: İmzasında işaretçiler olduğundan 'üye' güvenli olmayan bir bağlamda kullanılmalıdır
- CS9364: Güvenli olmayan üye 'üye' 'üye' güvenli üyeyi geçersiz kılamaz
- CS9365: Güvenli olmayan eleman 'üye', güvenli eleman 'üye'yi örtük olarak uygulayamaz
- CS9366: Güvenli olmayan üye 'üye', güvenli üye 'üye'yi implemente edemez
-
CS9367:
RequiresUnsafeAttributebu simgeye uygulanamaz. -
CS9368:
RequiresUnsafeAttributeyalnızca güncelleştirilmiş bellek güvenliği kuralları altında geçerlidir. -
CS9376: 'genel tür veya yöntem' içindeki 'tür parametresi' tür parametresinin '
unsafe' kısıtlamasını karşılamak için, 'new()' olarak işaretlenen 'constructor' oluşturucusu için bir unsafe bağlam gereklidir -
CS9377: '
unsafe' değiştiricisinin geçerli bellek güvenliği kuralları altında hiçbir etkisi yoktur. -
CS9379: Kaynakta '
RequiresUnsafeAttribute' kullanmayın; bunun yerine 'unsafe' değiştiricisini kullanın. -
CS9388: '
safe' ve 'unsafe' değiştiricileri birlikte kullanılamaz. -
CS9389: '
extern' üyesi '' veya 'unsafesafe' olarak işaretlenmelidir. -
CS9390: Her iki kısmi üye bildirimi de '
safe' olarak işaretlenmelidir veya hiçbiri 'safe' olarak işaretlenemez -
CS9392: Açık veya genişletilmiş düzen, sıfır olmayan ambalaj boyutu veya sıfır olmayan boyuta sahip bir türdeki alan '
unsafe' veya 'safe' olarak işaretlenmelidir. -
CS9396: '
unsafe' veya 'safe' değiştiricileri, hem 'property' özelliğinde veya dizin oluşturucusunda hem de erişimcisinde belirtilemez. Bunlardan birini kaldırın. -
CS9397: Özellik veya dizin oluşturucu 'property' için tüm erişimcilerde aynı '
unsafe' ya da 'safe' değiştiricisi belirtilemez. Bunun yerine, bu değiştiriciyi özelliğin kendisinde belirtin. -
CS9398: '
fixed' deyimi bağlamında await kullanılamaz - CS9401: Güvenli olmayan veya güvenli bildirim değiştiricileri yalnızca /unsafe ile derlenirken kullanılabilir.
İşaretçi işlemleri ve işaretçi çözme
-
CS0193:
*veya->işleci bir işaretçiye uygulanmalıdır - CS0196: İşaretçi yalnızca bir değerle dizine alınmalıdır
- CS0242: Söz konusu işlem geçersiz işaretçilerde tanımlanmamış
İşaretçi işlemlerini doğru kullanmak için başvuru kaldırma, dizin oluşturma ve aritmetik işlemlere yönelik kuralları izleyin. Daha fazla bilgi için bkz . İşaretçi türleri ve İşlev işaretçileri.
-
*veya->işlecini yalnızca veri işaretçilerine (CS0193) uygulayın. Bu işleçleri noktalayıcı olmayan türlerde veya işlev işaretçileriyle kullanmayın. C/C++ dilinden farklı olarak, C# dilinde işlev göstericilerini dereference edemezsiniz. - Yalnızca bir değere sahip dizin işaretçileri (CS0196). İşaretçiler çok boyutlu dizin oluşturmayı desteklemez.
- Void işaretçilerinde tanımsız işlemlerden kaçının (CS0242). Örneğin, derleyici işaret edilen verilerin boyutunu bilmediğinden boşluk işaretçisini artırmayın.
İşaretçi türleri ve yönetilen türler
- CS0208: Yönetilen bir türün adresini alamaz, boyutunu hesaplayamaz veya işaretçisini bildiremez ('type')
- CS0233: 'tanımlayıcı' önceden tanımlanmış bir boyuta sahip olmadığından, sizeof yalnızca güvenli olmayan bir bağlamda kullanılabilir
- CS8500: Bu, yönetilen bir türün ('type') adresini alır, boyutunu belirler veya ona işaretçi bildirimi yapar
İşaretçilerle ve sizeof işleçle doğru şekilde çalışmak için yönetilmeyen türleri ve uygun bağlamları kullanın. Daha fazla bilgi için bkz. Yönetilmeyen türler ve sizeof işleç.
- İşaretçileri yalnızca yönetilmeyen türlerle (CS0208) kullanın. Yönetilen türlerin adresini almayın, boyutunu almayın veya işaretçileri tanımlamayın. Yönetilen türler, başvuru türü alanlarını veya özelliklerini içeren başvuru türlerini ve yapıları içerir.
- Boyutu derleme zamanı sabiti olmayan türlerle çalışırken bir
sizeofbağlamındaunsafeişlecini kullanın (CS0233). - Bir yönetilen türün (CS8500) adresini almaktan, boyutunu almaktan veya ona işaretçi tanımlamaktan kaçının. Derleyici yönetilen türlerde işaretçi işlemlerini algıladığında bu uyarı (düzey 4) tetiklenir. Yönetilen bir tür, herhangi bir başvuru tipi veya alanı ya da özelliği olarak bir başvuru tipi içeren herhangi bir yapıdır. Daha fazla bilgi için bkz. Yönetilmeyen türler.
Sabit deyim kullanımı
- CS0209: Fixed bir ifadede bildirilen yerel değişkenin türü bir işaretçi türü olmalıdır
-
CS0210: Sabit veya
usingdeyimi bildiriminde bir başlatıcı sağlamanız gerekir - CS0211: Verilen ifadenin adresi alınamıyor
- CS0212: Sabit bir deyim başlatıcısının içinde yalnızca sabitlenmemiş ifadenin adresini alabilirsiniz
- CS0213: Sabit deyimini kullanarak zaten sabit olan bir ifadenin adresini alamazsınız
- CS0254: Sabit deyim atamasının sağ tarafı bir atama ifadesi olmayabilir
- CS0459: Salt okunur bir yerel değişkenin adresini almak mümkün değil
- CS0821: Örtük olarak yazılan yerel değişkenler düzeltilemez
- CS1656: 'salt okunur değişken türü' olduğundan 'değişken' atanamıyor
- CS8385: Verilen ifade sabit bir deyimde kullanılamaz
Bu hatalar, fixed ifadeyi yanlış kullandığınızda oluşur. deyimi fixed , çöp toplayıcının taşınabilir bir değişkeni yeniden konumlandırmasını engeller ve bu değişkene bir işaretçi bildirir. Daha fazla bilgi için bkz. Güvenli olmayan kod ve işaretçiler.
fixed deyimini doğru kullanmak için:
- Değişkeni işaretçi türü (CS0209) olarak bildirin.
-
fixeddeyim bildiriminde bir başlatıcı sağlayın (CS0210). - Yalnızca geçerli ifadelerin adresini alın: alanlar, yerel değişkenler ve işaretçi dolaylı (CS0211). İki değişkenin toplamı gibi hesaplanan ifadelerin adresini almayın.
- Düzeltilmemiş ifadelerde yalnızca
fixeddeyim başlatıcısı (CS0212) içinde adres alma işlecini kullanın. - Zaten sabit olan ifadelerde (
fixed) deyimi kullanmayın. Birunsafeyöntemdeki yerel değişkenler ve parametreler yığında zaten sabittir. - Bir
fixeddeyimi atamasının sağ tarafında dönüşüm ifadeleri kullanmayın (CS0254). - Salt okunur yerel değişkenlerin (CS0459) adresini almayın. Döngülerdeki
foreach,usingdeyimleri vefixedifadelerinde yer alan değişkenler salt okunurdur. Bu hata artık derleyicinin geçerli sürümleri tarafından üretilmemiştir. -
varifadelerindefixedyerine açık türler kullanın (CS0821). - Salt okunur bağlamlardaki değişkenlere, örneğin
foreachdöngülerde,usingdeyimlerde veyafixeddeyimlerde (CS1656) atama yapmayın. - Yalnızca bir
fixeddeyimde sabitlemeyi destekleyen ifadeler kullanın (CS8385). İfade adreslenebilir bir değişken, dize veya uygunGetPinnableReferencebir yöntem uygulayan bir tür olmalıdır.
Güvenli olmayan bağlam gereksinimleri
- CS0214: İşaretçiler ve sabit boyutlu arabellekler yalnızca güvenli olmayan bir bağlamda kullanılabilir
- CS0227: Güvenli olmayan kod yalnızca /unsafe ile derleniyorsa görünebilir
-
CS0244: İşaretçi türlerinde '
is' veya 'as' geçerli değil - CS1919: Nesne oluşturmada güvenli olmayan tür 'tür adı' kullanılamaz
-
CS4004: Güvenli olmayan bir bağlamda olamaz
await -
CS9123: '
&' işleci zaman uyumsuz yöntemlerdeki parametrelerde veya yerel değişkenlerde kullanılmamalıdır - CS9360: Bu işlem yalnızca güvenli olmayan bir bağlamda kullanılabilir
-
CS9361:
stackallociçindeSkipLocalsInitbaşlatıcı olmayan ifade yalnızca güvenli olmayan bir bağlamda kullanılabilir -
CS9362: 'member' güvenli olmayan bir bağlamda kullanılmalıdır çünkü '
unsafe' olarak işaretlenir - CS9363: ‘Üye’, imzasında işaretçiler bulunduğu için tehlikeli bir bağlamda kullanılmalıdır
-
CS9376: 'genel tür veya yöntem'deki 'tür parametresi' tür parametresinin '
unsafe' kısıtlamasını karşılamak için 'new()' olarak işaretlenen 'oluşturucu' oluşturucusu için güvenli olmayan bir bağlam gereklidir -
CS9398: '
fixed' deyimi bağlamında await kullanılamaz - CS9401: Güvenli olmayan veya güvenli bildirim değiştiricileri yalnızca /unsafe ile derleniyorsa kullanılabilir.
Bu tanılamalar, gerekli unsafe bağlam olmadan güvenli olmayan kod yapıları kullandığınızda veya güvenli olmayan türlerle izin verilmeyen işlemleri denediğinizde oluşur. Daha fazla bilgi için bkz . Güvenli olmayan kod, işaretçiler ve unsafe anahtar sözcük.
- İşaretçiler veya sabit boyutlu arabellekler kullanan yöntemleri, türleri veya kod bloklarını anahtar sözcüğüyle
unsafe(CS0214) işaretleyin. Derleyici, işaretçi türleri veya sabit boyutlu arabellek alanlarıyla çalışan tüm kodlar için açık bir güvenli olmayan bağlam gerektirir. - Proje ayarlarınızda AllowUnsafeBlocks derleyici seçeneğini etkinleştirin (CS0227). Bu seçenek olmadan, kod aksi takdirde doğru olsa bile derleyici tüm
unsafeblokları reddeder. -
ve
unsafebildirim değiştiricileri içinsafe'ı etkinleştirin (CS9401). Bildirimin gövdesi güvenli olmayan bir işlem içermese veya güncelleştirilmiş bellek güvenliği kurallarını etkinleştirmemiş olsanız bile proje dosyanızda<AllowUnsafeBlocks>true</AllowUnsafeBlocks>ayarlayın.unsafeüreten bir blok için aynı seçeneği etkinleştirin. -
isveyaasişleçlerini işaretçi türleriyle (CS0244) kullanmayın. İşaretçiler tür hiyerarşisine katılmadığından, bu tür testi işleçleri işaretçiler için geçerli değildir. - İşaretçi türü örnekleri (
new) oluşturmak için işlecini kullanmayın. Yönetilmeyen bellekte nesne oluşturmak için, işaretçi döndüren yerel yöntemleri çağırmak için birlikte çalışma kullanın. -
CS4004'ü eski yönerge olarak değerlendirin. C# 14 ve önceki sürümlerde,
awaitgüvenli olmayan bir bağlamın içine izin verilmez. C# 15 önizleme bellek güvenliği değişiklikleri kapsamında,awaitkullanımına unsafe bir bağlamda izin verilmektedir; bu nedenle bu genel kısıtlama artık geçerli kuralı açıklamamaktadır. - Zaman uyumsuz yöntemlerde (
&CS9123) parametrelerde veya yerel değişkenlerde işleç adresini () kullanmayın. Asenkron işlem bir askıya alma noktasından sonra devam ettiğinde, değişken bellek yığında bulunmayabilir. - Güvenli olmayan yapılar içeren işlemleri (işaretçi başvuru kaldırma, adres alma veya
sizeof, yönetilmeyen türler gibi)unsafeanahtar kelimesini kullanarak işaretleyin (CS9360). C# 15'in güncelleştirilmiş bellek güvenliği kuralları altında, derleyici güvenli olmayan bağlam gerektiren tek tek işlemleri tanımlar. -
unsafeözniteliği uygulandığında,stackallocbaşlatıcısı olmayan ifadeler içinSkipLocalsInitanahtar sözcüğünü kullanın (CS9361). Başlatıcı olmadan yığına ayrılan bellek, başlatılmamış veri içerir; bu da güvenli olmayan bir işlemdir. -
ile işaretlenmiş üyeleri (CS9362) veya imzalarında işaretçi bulunan üyeleri (
unsafe) çağırırkenunsafebağlamını kullanın. Güncellenmiş bellek güvenliği modeli kapsamında derleyici, güvenlik yükümlülüğünü açıkça çağırana aktaran üyeler için CS9362’yi, imzanın kendisinin işaretçiler içerdiği geriye dönük uyumluluk durumları içinse CS9363’ü bildirir. - Bir tür bağımsız değişkeninin parametresiz oluşturucusu ile işaretlendiğinde (
unsafe), genel tür veya yöntem örneklemeleri içinunsafebağlamını kullanın. Bu düzeltmeyi, kullanım sitesinde oluşturucu çağrısı görünmese bile hemnew()hem destructkısıtlamaları için uygulayın. Uzantı bloklarında ve genel uzantı yöntemlerinde tür bağımsız değişkenlerini de denetleyin. -
fixedöğesini birawaitgövdesinin veya başlatıcısının dışına taşıyın (CS9398). C# 15 önizlemesi, unsafe bağlamdaawaitkullanımına izin verir, ancakfixeddeyiminin sabitleme süresi yine de bir asenkron askıya alma noktasını kapsayamaz. girmeden önce işlemi beklerfixedveya beklemeden önce deyimindenfixedçıkın.
bir ifadede CS9376 için genel yöntem çağrısını, genel nesne oluşturmayı veya uzantı üyesi erişimini bir unsafe bloğunun içine yerleştirin. Genel bir temel tür, alan türü veya using tür diğer adı için bildirimin kendisini düzeltin; daha sonraki bir kullanımı sarmalamayın veya çağıranlara bir yükümlülük yayan bir üye değiştiriciye güvenmeyin; çünkü bu, bir unsafe unsafe bağlamı oluşturmak yerine çağıranlara yükümlülük aktarır. Gerekli bağlamı sağlayamayan bir bildirim için, güvenli bir parametresiz oluşturucuya sahip bir tür kullanın veya genel API'yi yeniden tasarlayın; örneğin, new() gerektirmek yerine bir factory kabul edecek şekilde.
Güvenli olmayan üye güvenlik sözleşmeleri
- CS9364: Güvensiz üye 'üye', güvenli üye 'üye'yi geçersiz kılamaz
- CS9365: Güvenli olmayan üye 'üye' örtük olarak güvenli üye 'üye' uygulayamaz
- CS9366: Güvenli olmayan 'üye', güvenli 'üye' olarak uygulanamaz
-
CS9367:
RequiresUnsafeAttributebu simgeye uygulanamaz. -
CS9368:
RequiresUnsafeAttributeyalnızca güncelleştirilmiş bellek güvenliği kuralları altında geçerlidir. -
CS9377: '
unsafe' değiştiricisinin geçerli bellek güvenliği kuralları altında hiçbir etkisi yoktur. -
CS9379: Kaynakta '
RequiresUnsafeAttribute' kullanmayın; bunun yerine 'unsafe' değiştiricisini kullanın. -
CS9388: '
safe' ve 'unsafe' değiştiricileri birlikte kullanılamaz. -
CS9389: '
extern' üyesi '' veya 'unsafesafe' olarak işaretlenmelidir. -
CS9390: Her iki kısmi üye bildiriminin de '
safe' olarak işaretlenmesi gerekir veya hiçbiri 'safe' olarak işaretlenemez -
CS9396: '
unsafe' veya 'safe' değiştiricileri hem özellikte veya dizin oluşturucuda hem de onun erişimcisinde belirtilemez. Bunlardan birini kaldırın. -
CS9397: 'property' özelliğinin veya dizin oluşturucusunun tüm erişimcilerinde aynı '
unsafe' ya da 'safe' değiştiricisi belirtilemez. Bunun yerine, bu değiştiriciyi özelliğin kendisinde belirtin.
Bu tanılamalar, güvenli olmayan olarak işaretlenen üyeler için C# 15 güvenlik sözleşmesi kurallarını zorunlu kılar. Derleyici, güvenli olmayan üyelerin temel sınıflar ve arabirimler tarafından oluşturulan güvenlik beklentilerini ihlal etmemesini sağlar. Daha fazla bilgi için bkz . Güvenli olmayan kod, işaretçiler ve unsafe anahtar sözcük.
- Güvensiz bir üyeyle (CS9364) güvenli bir taban üyeyi değiştirmeyin. Geçersiz kılma, temel üyenin güvenlik sözleşmesini korumalıdır. Temel üye güvenliyse geçersiz kılmanın da güvenli olması gerekir. Değiştiriciyi
unsafeveyaRequiresUnsafeAttributegeçersiz kılınan üyeden kaldırın veya temel üyeyi güvenli değil olarak işaretleyin. - Güvenli bir arabirim üyesini, güvenli olmayan bir üye ile örtük olarak uygulamayın (CS9365). Bir tür bir arabirim üyesini örtük olarak uyguladığında, arabirimi kullananlar güvenli bir işlem bekler. Güvenli olmayan atamayı uygulayan üyeden kaldırın veya açık arabirim uygulamasını kullanın.
- Güvenli olmayan bir üyeyle (CS9366) güvenli bir arabirim üyesini açıkça uygulamayın. Açık uygulamada bile, arabirim üyesinin güvenlik sözleşmesi korunmalıdır.
- Yalnızca desteklenen simge türlerine (
RequiresUnsafeAttribute) uygulayın. Bu öznitelik yöntemlere, özelliklere, olaylara, oluşturuculara ve türlere uygulanabilir, ancak tüm sembol türleri bunu desteklemez. - Güncelleştirilmiş bellek güvenliği kurallarının kullanılmasını
RequiresUnsafeAttributeetkinleştirin (CS9368). Bu öznitelik C# 15'in geliştirilmiş bellek güvenliği modelinin bir parçasıdır ve eski kurallar altında tanınmaz. Projenizin güncelleştirilmiş kuralları destekleyen bir dil sürümünü hedeflediğinden emin olun. - Hiçbir etkisi olmadığında değiştiriciyi
unsafekaldırın (CS9377). Geçerli bellek güvenliği kuralları kapsamında, belirli bağlamlar değiştiriciyi gerektirmez veya bundan yararlanmazunsafe. Derleyici, gereksiz ek açıklamaları temizleyebilmeniz için değiştirici anlamsız olduğunda uyarır. -
unsafedeğiştiricisini, kaynaktaRequiresUnsafeAttributeuygulamak yerine, doğrudan üye bildiriminde kullanın (CS9379). özniteliği yalnızca meta veri gösterimine yöneliktir; kaynak kodundaunsafeanahtar sözcük doğru mekanizmadır. - Bir bildirim için veya
safeseçeneklerinden yalnızca birini seçin, ikisini birden değil (unsafe).safedeğiştiricisi, bildirimin requires-unsafe değil olduğunu belirtir;externüyeleriyle sınırlı değildir. - Her
externüyeyiunsafeveyasafeolarak işaretleyin (CS9389). Güncelleştirilmiş bellek güvenliği kuralları altında, derleyici uygulamayı doğrulayamadığından extern üyelerin güvenlik sözleşmelerini açıkça bildirmesi gerekir. - Her iki kısmi üye bildiriminin de
safedeğiştiricisi konusunda aynı olduğundan emin olun (CS9390). Kısmi bildirimlerden birisafeolarak işaretlenmişse, tutarlı bir güvenlik sözleşmesini korumak için diğerinin desafeolarak işaretlenmesi gerekir. -
safeÖzelliğe veya dizin oluşturucuyaunsafeya da bir erişimciye uygulayın, ancak ikisine birden değil (CS9396). Özellik, tüm erişimciler için sözleşmeyi tanımlıyorsa, değiştiriciyi doğrudan özelliğin üzerinde belirtin. Yalnızca bir erişimci farklıysa, değiştiriciyi o erişimciye uygulayın ve özelliği değiştirmeden bırakın. - Bir özelliğin veya dizin oluşturucunun her erişimcisi aynı
unsafeveyasafedeğiştiriciye sahipse, bu değiştiriciyi özellik veya dizin oluşturucu bildirimine (CS9397) taşıyın. Erişimci değiştiricileri yalnızca erişimciler kasıtlı olarak farklı olduğunda kullanın.
Alan düzeni güvenliği
-
CS9392: Açık veya genişletilmiş düzen, sıfır olmayan ambalaj boyutu veya sıfır olmayan boyuta sahip bir türdeki alan '
unsafe' veya 'safe' olarak işaretlenmelidir.
Güncelleştirilmiş bellek güvenliği kuralları altında, [ExtendedLayout] veya [StructLayout(LayoutKind.Explicit)] içeren bir türdeki her örnek alanını unsafe veya safe olarak işaretleyin.
Pack içinde sıfır olmayan Size veya StructLayoutAttribute belirten türlerdeki örnek alanlarına, LayoutKind.Sequential veya LayoutKind.Auto olsa bile aynı değiştiricileri uygulayın. Örneğin, [StructLayout(LayoutKind.Sequential, Pack = 1)] her örnek alanı için açık bir güvenlik seçimi gerektirir.
Gerekli değişmezlerin sıradan alan erişimiyle korunduğunu doğrulayabiliyorsanız safe seçin. Arayanların bu değişmezleri denetlemesi gerektiğinde unsafe seçin. Daha fazla bilgi için bkz . Güvenli olmayan kod, işaretçiler ve safe anahtar sözcük.
- Otomatik özellik,
fieldkullanan bir özellik veya alan benzeri bir olay için, sentezlenmiş yedekleme alanını kapsayacak şekilde değiştiriciyi sahip olan özelliğe veya olaya yerleştirin. - Yakalanan bir birincil oluşturucu parametresi veya konumsal kayıt üyesi ek açıklamasız depolama alanı eklerse örtük depolama alanını açıkça bildirilen, açıklamalı bir alan veya özellik ile değiştirin. Birincil oluşturucu parametresi,
unsafeveyasafealan değiştiricisi koymak için uygun bir yer değildir. - Alanın örnek başına depolamaya ihtiyacı yoksa, hatayı kaldırmak için onu statik bir alan veya sabit yapın. Alternatif olarak, arka alanı olmayan hesaplanan bir özellik veya özel olay kullanın.
- Belirtilmemiş veya sıfır
PackveSizedeğerler genişletilmiş kuralı kendi başlarına tetiklemez. Açık veya genişletilmiş düzen yine de bu değerlerden bağımsız olarak ek açıklamalar gerektirir. - Bu denetimler güncelleştirilmiş bellek güvenliği kurallarını gerektirir. Yalnızca
previewdeğerininLangVersionolarak ayarlanması, bunların uygulanmasını etkinleştirmez.
Sabit boyutlu arabellekler
- CS1641: Sabit boyutlu arabellek alanı, alan adından sonra dizi boyutu belirticisine sahip olmalıdır
- CS1642: Sabit boyutlu arabellek alanları yalnızca yapıların üyesi olabilir
-
CS1663: Sabit boyutlu arabellek türü aşağıdakilerden biri olmalıdır:
bool,byte,short,int,long, ,char, ,sbyte,ushort,uintulongfloatveyadouble - CS1664: Uzunluğu 'length' ve türü 'type' olan sabit boyutlu arabellek çok büyük
- CS1665: Sabit boyutlu arabelleklerin uzunluğu sıfırdan büyük olmalıdır
- CS1666: Sabitlenmemiş ifadelerde bulunan sabit boyutlu arabelleği kullanamazsınız. Fixed deyimini kullanmayı deneyin.
- CS1708: Sabit boyutlu arabelleklere yalnızca yerel değişkenler veya alanlar aracılığıyla erişilebilir
-
CS1716: '
System.Runtime.CompilerServices.FixedBuffer' özniteliğini kullanmayın. Bunun yerine 'sabit' alan değiştiricisini kullanın. - CS7092: Sabit arabellek yalnızca bir boyuta sahip olabilir.
-
CS8372: Bir özellikte '
System.Runtime.CompilerServices.FixedBuffer' özniteliğini kullanmayın - CS9049: Sabit alan bir başvuru alanı olmamalıdır.
Bu hatalar, sabit boyutlu arabelleklerle çalışırken oluşur. Sabit boyutlu arabellekler doğrudan struct'lara eklenmiş dizilerdir ve öncelikle enteroperabilite senaryoları için kullanılır. Daha fazla bilgi için bkz. Sabit boyutlu arabellekler.
Sabit boyutlu arabellekleri doğru şekilde tanımlamak ve kullanmak için:
- Pozitif bir tamsayı sabiti (CS1641, CS1665) kullanarak alan adından sonraki dizi boyutunu belirtin. Arabelleğin toplam boyutu (öğe sayısı öğe boyutuyla çarpılır) 2^31 baytı (CS1664) aşmamalıdır.
- Sabit boyutlu arabellekleri sınıflarda değil yalnızca yapılarda (CS1642) bildirin. Bir sınıfta alana ihtiyacınız varsa normal bir dizi kullanın.
- Desteklenen öğe türlerinden birini kullanın:
bool,byte,short,int, ,long,char, ,sbyteushortuintulongfloatveyadouble(CS1663). - Arabelleğe erişmeden önce içeren yapıyı sabitlemek için bir
fixedifadesi kullanın (CS1666). - Sabit boyutlu arabelleklere yalnızca yerel değişkenler veya alanlar aracılığıyla erişin, aracı ifadeler (CS1708) üzerinden değil.
-
fixedÖzniteliği (System.Runtime.CompilerServices.FixedBuffer) yerine alan değiştiricisini kullanın. Bu özniteliği özelliklere de uygulamayın (CS8372). - Yalnızca bir boyuta (CS7092) sahip sabit arabellekler bildirin. Çok boyutlu sabit arabellekler desteklenmez.
- Sabit boyutlu arabellekleri alan olarak
refbildirmeyin (CS9049). Sabit boyutlu arabellekler değer alanları olmalıdır.
İşlev işaretçileri
- CS8812: 'method' metot grubu 'type' işlev olmayan işaretçi türüne dönüştürülemiyor.
İşlev işaretçisi almak için açık işlev işaretçisi türü tür atamasıyla işlecin adresini kullanın. Yöntem gruplarını & veya işlev dışı diğer işaretçi türlerini atamak için kullanmayın. Daha fazla bilgi için bkz . İşlev işaretçileri.