Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
CA1417: Non usare
| Proprietà | valore |
|---|---|
| ID regola | CA1417 |
| Title | Non usare OutAttribute sui parametri di stringa per P/Invokes |
| Categoria | Interoperabilità |
| La correzione causa un'interruzione o meno | Non causa un'interruzione |
| Abilitato per impostazione predefinita in .NET 10 | Come avviso |
Causa
Un parametro stringa P/Invoke viene passato per valore e contrassegnato con OutAttribute.
Descrizione regola
Il runtime .NET esegue automaticamente l'interno delle stringhe. Se una stringa internata contrassegnata con OutAttribute viene passata per valore a un P/Invoke, il runtime può essere destabilizzato.
Come correggere le violazioni
Se è necessario eseguire il marshalling dei dati stringa modificati al chiamante, passare invece la stringa per riferimento. In caso contrario, l'oggetto OutAttribute può essere rimosso senza altre modifiche.
// 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);
Quando eliminare gli avvisi
Non è sicuro eliminare un avviso da questa regola.