CA1417: не используйте OutAttribute
в параметрах строки для вызовов P/Invoke
Свойство | Значение |
---|---|
Идентификатор правила | CA1417 |
Заголовок | Не используйте OutAttribute в параметрах строки для P/Invokes |
Категория | Совместимость |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 8 | Как предупреждение |
Причина
Строковый параметр строки P/Invoke передается по значению и помечается атрибутом OutAttribute.
Описание правила
Среда выполнения .NET автоматически выполняет интернирование строк. Если интернированная строка, помеченная OutAttribute, передается по значению в метод P/Invoke, это может дестабилизировать среду выполнения.
Устранение нарушений
Если маршалирование измененных строковых данных обратно вызывающей стороне требуется, передайте строку по ссылке. В противном случае OutAttribute можно удалить без любых других изменений.
// 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);
Когда лучше отключить предупреждения
Отключать предупреждения из этого правила небезопасно.
См. также
Кері байланыс
https://aka.ms/ContentUserFeedback.
Жақында қолжетімді болады: 2024 жыл бойы біз GitHub Issues жүйесін мазмұнға арналған кері байланыс механизмі ретінде біртіндеп қолданыстан шығарамыз және оны жаңа кері байланыс жүйесімен ауыстырамыз. Қосымша ақпаратты мұнда қараңыз:Жіберу және пікірді көру