gpt4 book ai didi

.net - .NET 中的程序集是如何解析的?

转载 作者:行者123 更新时间:2023-12-01 22:19:28 25 4
gpt4 key购买 nike

.NET 中的程序集是如何解析的。我的意思是,如何解析具有完全限定名称的程序集。我对公钥/私钥 token 和强命名感到困惑。谢谢

编辑:我还读过有关延迟签名之类的内容。人们真的使用它吗? (是否有人实际使用过延迟签名)谁生成了对程序集进行签名的 key 。如果我问了太多问题,我很抱歉。但是,我对整件事感到困惑。

最佳答案

强命名与“公钥 token ”一起使用来生成程序集完整显示名称 ( mscorlib, version=2.0.0.0, Culture=neutral, PublicKeyToken=b4778,..... )。这使我们能够在同一应用程序目录中并排拥有同一程序集的多个版本。

公钥 token (因此,字符串命名技术)还允许 .NET 加载程序检测自您分发程序集内容以来是否有人篡改了您的程序集内容。这是事实,因为当您使用“私有(private) token ”对程序集进行签名时,编译器将生成一个哈希值,该值嵌入​​到描述“私有(private) token ”的公共(public)部分的程序集元数据中。然后,加载程序可以使用该值来确定您的程序集是否被修改。

关于解析程序集,需要考虑一些基本事项:

  • 探测加载程序尝试使用基本目录“探测”技术来定位程序集。这意味着它将尝试在应用程序的启动目录中查找“MyAssembly.dll ”(例如),如果不存在,则在该目录下面的子目录中查找。如果探测未能找到“MyAssembly.dll”,则AppDomainAssemblyResolve事件被触发。

  • 机器/用户/系统配置machine.config , user.configsystem.config是存储在系统本地的配置文件,可用于更改程序集解析器在“计算机”、“用户”或“系统”范围设置上的行为。

  • 发布商政策可以在应用程序的配置文件中使用“<assemblyIdentity> ” XML 标记(例如“MyApp.exe.config ”)将解析器指向某个版本的程序集或从不同位置加载程序集。

  • 自定义分辨率处理AssemblyResolve的“AppDomain”事件。每当无法通过“传统”方法解析程序集时,就会引发此事件

到目前为止,最简单的机制是处理“AssemblyResolve”事件。

总而言之,解析器会查找当前目录或全局程序集缓存,处理策略,然后最终允许自定义解析。

关于.net - .NET 中的程序集是如何解析的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1235253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com