Предупреждение о небезопасности обрезки и совместимости AOT при передаче через WinRT ABI (List)C#

Место общения программистов C#
Ответить
Anonymous
 Предупреждение о небезопасности обрезки и совместимости AOT при передаче через WinRT ABI (List)

Сообщение Anonymous »

У меня есть простая библиотека классов .NET 8 (C#), которая считывает некоторые значения реестра.
Она была создана и построена на базе MS VS 2022.
ФАЙЛ ПРОЕКТА:

Код: Выделить всё

net8.0-windows10.0.26100.0
disable
enable

МЕТОДЫ:

Код: Выделить всё

public static RegistryKey? GetRegistryKey () =>
Registry
.CurrentUser
.OpenSubKey("Software")
?.OpenSubKey("ODBC")
?.OpenSubKey("ODBC.INI")
?.OpenSubKey("ODBC Data Sources");

public static IEnumerable GetDataSources1 ()
{
using var key = DataProviderOdbc.GetRegistryKey();
{
// Only the following line causes the warning (listed below).
return (key?.GetValueNames()?.ToList() ?? []);
}
}

public static string [] GetDataSources2 (RegistryKey? key)
=> key?.GetValueNames() ?? [];

public static IEnumerable GetDataSources3 (RegistryKey? key)
=> key?.GetValueNames()?.ToList() ?? [];

public static IEnumerable GetDataSources4 ()
=> DataProviderOdbc.GetRegistryKey()?.GetValueNames()?.ToList() ?? [];

Code: CsWinRT1030
Type 'System.Collections.Generic.List' implements generic WinRT interfaces which requires generated code using unsafe for trimming and AOT compatibility if passed across the WinRT ABI. Project needs to be updated with 'true'.
Я не понимаю, почему только первая реализация с именем GetDataSources1 приводит к приведенному выше предупреждению. Сначала я подумал, что это сводное предупреждение, поэтому попробовал переупорядочить и прокомментировать методы во всех комбинациях. Я тщетно чистил и пересобирал решение.
Библиотека полна как неявных, так и явных приведения типов между T[], IEnumerable, LIST и т. д. Почему только эта строка? Должно быть, я делаю что-то глупое. Что мне не хватает? Зачем мне/должен рассматривать возможность пометки сборки как разрешающую небезопасный код?
Побочный вопрос: имеет ли это вообще какое-либо отношение к реестру (я предполагаю, что нет)? Я мало что знаю о мосте WinRT и о том, почему он вообще здесь рассматривается. Мы также будем признательны за любое понимание значения этого предупреждения.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ss-the-win
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»