AssemblyName类是.NET中程序集的唯一身份标识,它通过名称、版本、文化、公钥令牌等属性精确描述程序集元数据,支撑程序集的解析、加载与绑定;在版本管理中,它作为绑定重定向和强命名验证的核心依据,确保运行时加载正确且安全的程序集版本,有效解决“DLL Hell”问题。

.NET中的
AssemblyName
AssemblyName
AssemblyName
AssemblyName
Name
Version
CultureInfo
PublicKeyToken
在实践中,我们经常需要从一个程序集的全名字符串(比如“MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdef1234567890”)来获取这些信息。
AssemblyName
using System;
using System.Reflection;
public class AssemblyNameParser
{
public static void Main(string[] args)
{
string assemblyFullName = "MyCustomLibrary, Version=1.2.3.4, Culture=neutral, PublicKeyToken=a1b2c3d4e5f6a7b8";
try
{
// 通过字符串解析程序集名称
AssemblyName an = new AssemblyName(assemblyFullName);
Console.WriteLine($"解析成功!");
Console.WriteLine($"名称: {an.Name}");
Console.WriteLine($"版本: {an.Version}");
Console.WriteLine($"文化区域: {an.CultureInfo?.Name ?? "无"}");
Console.WriteLine($"公钥令牌: {BitConverter.ToString(an.GetPublicKeyToken() ?? new byte[0]).Replace("-", "").ToLowerInvariant()}");
Console.WriteLine($"处理器架构: {an.ProcessorArchitecture}");
// 也可以从已加载的程序集获取其AssemblyName
Assembly currentAssembly = Assembly.GetExecutingAssembly();
AssemblyName currentAssemblyName = currentAssembly.GetName();
Console.WriteLine($"\n当前程序集名称: {currentAssemblyName.FullName}");
}
catch (FileLoadException ex)
{
Console.WriteLine($"解析失败,可能是格式不正确: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"发生未知错误: {ex.Message}");
}
}
}这段代码展示了如何将一个程序集全名字符串解析成
AssemblyName
AssemblyName
AssemblyName
AssemblyName
想象一下,CLR就像一个快递员,它需要派送一个包裹(你的引用程序集)。这个包裹上贴着一个地址标签,这个标签就是
AssemblyName
如果CLR在这些地方找到了一个程序集,它还会对比找到的程序集的
AssemblyName
AssemblyName
AppDomain.AssemblyResolve
AssemblyName
AssemblyName
程序集版本兼容性,俗称“DLL Hell”,是.NET开发中一个常见的痛点。当多个应用程序或组件依赖于同一个程序集的不同版本时,问题就来了。
AssemblyName
最直接的帮助就是它的
Version
AssemblyName
这时候,
AssemblyName
app.config
web.config
MyLibrary, Version=1.0.0.0
MyLibrary, Version=2.0.0.0
AssemblyName
一个典型的绑定重定向配置看起来是这样的:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MyLegacyLibrary"
publicKeyToken="a1b2c3d4e5f6a7b8"
culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0-1.9.9.9"
newVersion="2.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>这里,
assemblyIdentity
Name
PublicKeyToken
culture
AssemblyName
oldVersion
newVersion
AssemblyName
AssemblyName
强命名是.NET程序集的一种安全和唯一性机制,它与
AssemblyName
AssemblyName
PublicKeyToken
为什么说它很重要呢?
全局唯一性:强命名确保了即使两个不同的开发者创建了同名同版本的程序集,只要它们的强命名密钥不同,它们在运行时就会被视为完全不同的程序集。这避免了命名冲突,尤其是在全局程序集缓存(GAC)中,GAC只接受强命名的程序集。
版本控制和并行执行:因为强命名提供了绝对的唯一性,所以它使得同一程序集的多个不同版本可以在同一台机器上共存,互不干扰。应用程序可以明确指定它需要哪个特定强命名版本的程序集,而不会被其他应用程序安装的不同版本所影响。这对于企业级应用和共享组件来说至关重要。
完整性校验:强命名程序集在构建时会用私钥进行签名,运行时CLR会使用公钥来验证签名。如果程序集在发布后被篡改,签名验证就会失败,CLR会拒绝加载它。这提供了对程序集完整性的保护,防止了恶意代码注入或意外损坏。
从
AssemblyName
PublicKeyToken
AssemblyName.GetPublicKeyToken()
AssemblyName.GetPublicKey()
AssemblyName
AssemblyName
以上就是.NET的AssemblyName类有什么功能?如何解析程序集名称?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号