CA1417: P/Invokes için dize parametrelerinde kullanmayın OutAttribute

Özellik Değer
Kural Kimliği CA1417
Başlık P/Invokes için dize parametrelerinde kullanmayın OutAttribute
Kategori Birlikte çalışabilirlik
Düzeltme bozucu ya da bozmayan olabilir Kesintisiz
.NET 10'da varsayılan olarak etkin Uyarı olarak
Geçerli diller C# ve Visual Basic

Neden

P/Invoke dize parametresi değere göre geçirilir ve OutAttribute ile işaretlenir.

Kural açıklaması

.NET çalışma zamanı otomatik olarak dize sabitlenmesini yapar. OutAttribute ile işaretlenmiş bir interned dizesi bir P/Invoke'a değer olarak geçirilirse, çalışma zamanı dengesiz hale getirilebilir.

İhlalleri düzeltme

Değiştirilen dize verilerini çağırana geri düzenlemek gerekiyorsa, bunun yerine dizeyi referans olarak 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.

Ayrıca bkz.