我有一个简单的 .NET 8 (C#) 类库,可以读取一些注册表值。
它是在 MS VS 2022 上创建和构建的。
项目文件:
<PropertyGroup>
<TargetFramework>net8.0-windows10.0.26100.0</TargetFramework>
<ImplicitUsings>disable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
方法:
public static RegistryKey? GetRegistryKey () =>
Registry
.CurrentUser
.OpenSubKey("Software")
?.OpenSubKey("ODBC")
?.OpenSubKey("ODBC.INI")
?.OpenSubKey("ODBC Data Sources");
public static IEnumerable<string> 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<string> GetDataSources3 (RegistryKey? key)
=> key?.GetValueNames()?.ToList() ?? [];
public static IEnumerable<string> GetDataSources4 ()
=> DataProviderOdbc.GetRegistryKey()?.GetValueNames()?.ToList() ?? [];
Code: CsWinRT1030
Type 'System.Collections.Generic.List<string>' 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 '<AllowUnsafeBlocks>true</AllowUnsafeBlocks>'.
我不明白为什么只有第一个名为
GetDataSources1
的实现才会导致上述警告。起初,我认为这是一个综合警告,因此我尝试对所有组合中的方法进行重新排序和注释。我徒劳地清理并重建了解决方案。
该库充满了 T[]、IEnumerable、LIST 等之间的隐式和显式转换。为什么只有这一行?我一定是在做一些愚蠢的事情。我缺少什么?为什么我/应该考虑标记程序集以允许不安全代码?
附带问题:这是否与注册表有任何关系(我假设没有)?我对 WinRT 桥了解不多,也不知道为什么要在这里考虑。任何对此警告含义的了解也将不胜感激。
我也有类似的问题。发现这个:更新到 VS 17.11.5 后项目无法构建 看看: https://developercommunity.visualstudio.com/t/Project-fail-to-build-after-update-to-VS/10763457?sort=active&openOnly=false&closeOnly=false&topics=数据库+解决方案
希望有帮助