Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
CA1417: не используйте
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA1417 |
| Заголовок | Не используйте OutAttribute в параметрах строки для P/Invokes |
| Категория | Совместимость |
| Исправление является критическим или не критическим | неразрывный |
| Включен по умолчанию в .NET 10 | Как предупреждение |
| Применимые языки | C# и Visual Basic |
Причина
Строковый параметр строки 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);
Когда лучше отключить предупреждения
Отключать предупреждения из этого правила небезопасно.