Sdílet prostřednictvím


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

  • 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 v false souboru projektu. Další informace naleznete v tématu EnableNETAnalyzers.

Ovlivněná rozhraní API

Nedetekovatelné prostřednictvím analýzy rozhraní API.