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.
CA1417: P/Invokes için dize parametrelerinde kullanmayın
Özellik | Değer |
---|---|
Kural Kimliği | CA1417 |
Başlık | P/Invokes için dize parametrelerinde kullanmayın OutAttribute |
Kategori | Birlikte çalışabilirlik |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Uyarı olarak |
Neden
P /Invoke dize parametresi değere göre geçirilir ve ile OutAttributeişaretlenir.
Kural açıklaması
.NET çalışma zamanı otomatik olarak dize stajyerliği gerçekleştirir. ile OutAttribute işaretlenmiş bir interned dizesi bir P/Invoke'a değer tarafından geçirilirse, çalışma zamanı dengesiz hale getirilebilir.
İhlalleri düzeltme
Değiştirilen dize verilerini çağırana yeniden sıralamak gerekiyorsa, bunun yerine dizeyi başvuruya göre geçirin. Aksi takdirde, OutAttribute başka bir değişiklik yapılmadan kaldırılabilir.
// Violation
[DllImport("MyLibrary")]
private static extern void Foo([Out] string s);
// Fixed: passed by reference
[DllImport("MyLibrary")]
private static extern void Foo(out string s);
// Fixed: marshalling data back to caller is not required
[DllImport("MyLibrary")]
private static extern void Foo(string s);
Uyarıların ne zaman bastırılması gerekiyor?
Bu kuraldan gelen bir uyarıyı engellemek güvenli değildir.