CA1417: Jangan gunakan OutAttribute pada parameter string untuk P/Invokes

Properti Nilai
ID Aturan CA1417
Judul Jangan gunakan OutAttribute pada parameter string untuk P/Invokes
Kategori Interoperabilitas
Perbaikan bersifat merusak atau tidak merusak Tidak terputus
Diaktifkan secara default di .NET 10 Sebagai peringatan
Bahasa yang berlaku C# dan Visual Basic

Penyebab

Parameter string P/Invoke dikirimkan berdasarkan nilai dan ditandai dengan OutAttribute.

Deskripsi aturan

Runtime .NET secara otomatis melakukan penginternan string. Jika string yang disimpan secara internal yang ditandai dengan OutAttribute diteruskan dengan nilai ke P/Invoke, runtime bisa menjadi tidak stabil.

Cara memperbaiki pelanggaran

Jika marshalling data string yang dimodifikasi kembali ke pemanggil diperlukan, berikan string berdasarkan referensi sebagai gantinya. Jika tidak, OutAttribute dapat dihapus tanpa perubahan lain.

 // 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);

Kapan harus menekan peringatan

Tidak aman untuk mengabaikan peringatan dari aturan ini.

Lihat juga