Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
CA1417: Jangan gunakan
Properti | Nilai |
---|---|
ID Aturan | CA1417 |
Judul | Jangan gunakan OutAttribute pada parameter string untuk P/Invokes |
Golongan | Interoperabilitas |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | Sebagai peringatan |
Penyebab
Parameter string P/Invoke diteruskan oleh nilai dan ditandai dengan OutAttribute.
Deskripsi aturan
Runtime .NET secara otomatis melakukan interning string. Jika string magang yang ditandai dengan OutAttribute diteruskan oleh nilai ke P/Invoke, runtime dapat didestabilisasi.
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 menekan peringatan dari aturan ini.