Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
.NET-kodanalysregeln CA1417 är aktiverad som standard med början i .NET 5. Den skapar en byggvarning för alla Platform Invoke (P/Invoke) metoddefinitioner där en -parameter skickas som värde och är markerad med String.
Ändra beskrivning
Från och med .NET 5 innehåller .NET SDK .NET-källkodsanalyserare. Flera av dessa regler är aktiverade som standard, inklusive CA1417. Om projektet innehåller kod som bryter mot den här regeln och är konfigurerat för att behandla varningar som fel kan den här ändringen bryta mot bygget.
Regel CA1417 flaggar P/Invoke-metoddefinitioner där String parameter markeras med attributet OutAttribute och passeras som värde. Till exempel:
[DllImport("MyLibrary")]
private static extern void PIMethod([Out] string s);
.NET-körningen underhåller en tabell, kallad internpoolen, som innehåller en enda referens till varje unik literalsträng i ett program. Om en intern sträng som markerats med OutAttribute skickas som värde till en P/Invoke-metod kan körmiljön destabiliseras. Mer information om stränginternering finns i anteckningarna för String.Intern(String).
Version lanserad
5,0
Rekommenderad åtgärd
Om du behöver konvertera ändrade strängdata tillbaka till anroparen skickar du strängen med referens i stället.
[DllImport("MyLibrary")] private static extern void PIMethod(out string s);Om du inte behöver konvertera ändrade strängdata tillbaka till anroparen tar du helt enkelt bort OutAttribute.
[DllImport("MyLibrary")] private static extern void PIMethod(string s);Mer information finns i CA1417.
Om du vill inaktivera kodanalys helt anger du
EnableNETAnalyzerstillfalsei projektfilen. Mer information finns i EnableNETAnalyzers.
Berörda API:er
Går inte att identifiera via API-analys.