gpt4 book ai didi

C# 数据 PublicKeyToken 值

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:27 24 4
gpt4 key购买 nike

如果我从我的项目 C# 文件夹中打开 Resources.resx,我会看到类似这样的内容:

<data name="picture" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\picture.png;System.Drawing.Bitmap, System.Drawing,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>

什么是 PublicKeyToken 以及我应该为其分配什么值?

最佳答案

.NET 使用程序集;每个 EXE 或 DLL 文件都被视为一个程序集。

为了让任何其他需要它的 .NET 代码在机器上全局识别程序集(当然不需要在本地复制它),您可以将程序集放在全局程序集缓存中,也就是 GAC。

您不能在 GAC 中只放置任何程序集,出于安全原因,将程序集放置在那里要求它是强类型,也就是签名。不会在这里进入签署程序集的过程,因为它不相关,但签署过程的一部分是获取公钥。然后,您可以对任意数量的程序集使用同一个 key ,这样程序集可能只有一个 key ,但一个 key 可能由许多不同的程序集共享。

当 .NET 加载强类型程序集时,它必须获得三个参数:

  1. 程序集名称。
  2. 汇编版本。
  3. 程序集公钥。

如果缺少任何一个或错误,.NET 将抛出找不到程序集的错误。

现在是你的最后一个问题:给定一个已知的组装名称,如何找到它的公钥 token ?

嗯,所有 4.0 之前的系统程序集都可以通过 Windows 按钮 + R 然后键入 %windir%\assembly输入。您将看到已安装程序集的完整表格,每个程序集都有名称、版本和 key 。例如,您可以在那里看到原始问题中发布的 key 确实属于 System.Drawing 程序集。

由于 4.0 框架中的重大更改,其程序集的 GAC 位置已更改为 %windir%\Microsoft.NET\assembly\ 并且不再以友好的列表方式显示,而是作为文件夹和文件:新 GAC 中的每个程序集都有自己的文件夹,您可以从其名称中提取公共(public) token 。例如 System.Web 包含以下子文件夹:

v4.0_4.0.0.0__b03f5f7f11d50a3a

所以这意味着 key 是 b03f5f7f11d50a3a 如果您引用了 System.Web 程序集,那么这就是您应该放在 .resx 文件中的内容。 (请注意,它与 System.Drawing 键相同,但在这里并不真正相关)

关于C# 数据 PublicKeyToken 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14797570/

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