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 |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 8'de 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.
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin