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:
RequiresUnsafeveyaexternolarak işaretlendiğinden 'üye' güvenli olmayan bir bağlamda kullanılmalıdır - 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:
RequiresUnsafe -
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' değiştiricisi yalnızca '' olarak işaretlenmemişextern'unsafe' üyelerinde kullanılabilir. -
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
İş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çilerde çok boyutlu dizin oluşturma desteklenmez.
- 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:
RequiresUnsafeveyaexternşeklinde işaretlendiğinden, 'member' güvenli olmayan bir bağlamda kullanılmalıdır - CS9363: ‘Üye’, imzasında işaretçiler bulunduğu için tehlikeli bir bağlamda kullanılmalıdır
-
CS9376:
RequiresUnsafe
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. -
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. - Güvenli olmayan kodu zaman uyumsuz koddan (CS4004) ayrı tutun. Çalışma zamanı, askıya alma noktaları boyunca işaretçilerin geçerliliğini garanti edemediğinden, derleyici
awaitbloğu içindekiunsafeifadelerine izin vermez. Güvensiz işlemler için ayrı yöntemler oluşturun ve bu yöntemleri eşzamansız yöntemlerden çağırın. - 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. - Bir
unsafebağlam kullanın;RequiresUnsafeveyaexternile işaretlenmiş üyeleri (CS9362), ya da imzalarında işaretçileri olan üyeleri (CS9363) çağırırken. C# 15 derleyicisi, yalnızca bildirimde değil, çağrı sitesinde güvenli olmayan üye kullanımını izler. -
unsafebağlamını,new()kısıtlaması ileRequiresUnsafeveyaexternile işaretlenmiş bir oluşturucu çağrılması gerektiğinde (CS9376) kullanın. Genel örnekleme oluşturucuyu örtük olarak çağırır, bu nedenle çağrı bağlamı güvenli olmamalıdır.
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' değiştiricisi yalnızca '' olarak işaretlenmemişextern'unsafe' üyelerinde kullanılabilir. -
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
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. - Değiştiriciyi
safeyalnızca henüz işaretlenmemişexternüyelereunsafe(CS9388) uygulayın.safedeğiştiricisi, bir extern üyesini extern bildirimleri için geçerli olan varsayılan unsafe varsayımının dışında açıkça tutar. - 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.
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.