全局程序集缓存 API 已过时
.NET Core 和 .NET 5 及更高版本消除了 .NET Framework 中存在的全局程序集缓存 (GAC) 这一概念。 因此,所有处理 GAC 的 .NETCore 和 .NET 5+ API 要么失败,要么不执行任何操作。
为帮助开发人员摒弃这些 API,一些 GAC 相关的 API 标记为已过时,并在编译时生成 SYSLIB0005
警告。 .NET 的未来版本中将删除这些 API。
更改描述
以下 API 标记为已过时。
API | 在以下版本中标记为已过时… |
---|---|
Assembly.GlobalAssemblyCache | 5.0 RC1 |
在 .NET Framework 2.x - 4.x 中,如果从 GAC 加载了查询的程序集,则 GlobalAssemblyCache 属性返回 true
,如果从磁盘的不同位置加载了该程序集,则返回 false
。 在 .NET Core 2.x - 3.x 中,GlobalAssemblyCache 始终返回 false
,这表明 GAC 在 .NET Core 中不存在。
Assembly asm = typeof(object).Assembly;
// Prints 'True' on .NET Framework, 'False' on .NET Core.
Console.WriteLine(asm.GlobalAssemblyCache);
在 .NET 5 及更高版本中,GlobalAssemblyCache 属性仍始终返回 false
。 然而,属性 Getter 也标记为已过时,以指示调用方应停止访问该属性。 库和应用不得使用 GlobalAssemblyCache API 来确定运行时行为,因为它在 .NET Core 和 .NET 5 及更高版本中始终返回 false
。
Assembly asm = typeof(object).Assembly;
// Prints 'False' on .NET 5+; also produces warning SYSLIB0005 at compile time.
Console.WriteLine(asm.GlobalAssemblyCache);
这是仅在编译时进行的更改。 以前版本的 .NET Core 没有运行时更改。
更改原因
.NET Core 和 .NET 5 及更高版本中没有全局程序集缓存 (GAC) 这一概念。
引入的版本
.NET 5.0
建议操作
如果你的应用程序查询 GlobalAssemblyCache 属性,请考虑删除该调用。 如果在运行时使用 GlobalAssemblyCache 值在“GAC 中的程序集”流与“不在 GAC 中的程序集”流之间进行选择,请重新考虑流对于.NET Core 或 .NET 5+ 应用程序是否仍然有意义。
如果必须继续使用已过时的 API,可在代码中取消
SYSLIB0005
警告。Assembly asm = typeof(object).Assembly; #pragma warning disable SYSLIB0005 // Disable the warning. // Prints 'False' on .NET 5+. Console.WriteLine(asm.GlobalAssemblyCache); #pragma warning restore SYSLIB0005 // Re-enable the warning.
还可以在项目文件中取消警告,这将对项目中的所有源文件禁用警告。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- NoWarn below will suppress SYSLIB0005 project-wide --> <NoWarn>$(NoWarn);SYSLIB0005</NoWarn> </PropertyGroup> </Project>
取消
SYSLIB0005
仅禁用 GlobalAssemblyCache 过时警告。 它不会禁用任何其他警告。
受影响的 API
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈