Upozornění CA1417: OutAttribute u parametru řetězce pro volání nespravovaného kódu
Pravidlo analyzátoru kódu .NET CA1417 je ve výchozím nastavení povolené od verze .NET 5. Vytvoří upozornění sestavení pro všechny definice metody Invoke platformy (P/Invoke), kde String je parametr předán hodnotou a označen .OutAttribute
Změna popisu
Počínaje rozhraním .NET 5 obsahuje sada .NET SDK analyzátory zdrojového kódu .NET. Některé z těchto pravidel jsou ve výchozím nastavení povolené, včetně CA1417. Pokud váš projekt obsahuje kód, který porušuje toto pravidlo a je nakonfigurovaný tak, aby zacházel s upozorněními jako s chybami, může tato změna přerušit sestavení.
Pravidlo CA1417 označí definice metody P/Invoke , kde String je parametr označen atributem OutAttribute a předává se hodnotou. Příklad:
[DllImport("MyLibrary")]
private static extern void PIMethod([Out] string s);
Modul runtime .NET udržuje tabulku s názvem intern pool, která obsahuje jediný odkaz na každý jedinečný literálový řetězec v programu. Pokud je interovaný řetězec označený OutAttribute hodnotou předán metodě P/Invoke, může být modul runtime rezervován. Další informace o prokládání řetězců naleznete v poznámkách pro String.Intern(String).
Zavedená verze
5,0
Doporučená akce
Pokud potřebujete zařadovat upravená řetězcová data zpět volajícímu, předejte řetězec odkazem.
[DllImport("MyLibrary")] private static extern void PIMethod(out string s);
Pokud nepotřebujete zařazovat upravená řetězcová data zpět volajícímu, jednoduše ho OutAttributeodeberte .
[DllImport("MyLibrary")] private static extern void PIMethod(string s);
Další informace najdete v tématu CA1417.
Pokud chcete analýzu kódu úplně zakázat, nastavte
EnableNETAnalyzers
vfalse
souboru projektu. Další informace naleznete v tématu EnableNETAnalyzers.
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.