我在这方面不是很有经验 - 所以我有几个问题。首先,所有 .Net 创建的 DLL 是否都有自己的 GUID?如果没有,我的问题是如何获得一个并将其与 DLL 关联。
那么问题是,我如何获得该 dll 的 GUID - 即。给定 DLL 路径 (c:\some\path\to\a\file.dll),如何确定其 GUID?另外,有没有一种简单的方法可以走另一条路(GUID -> DLL) - 我读过一些相关内容,但其中很多涉及 VB6 DLL 和 COM 东西......这仍然适用于 .Net DLL ?
更新:感谢您的回答。也许我问错了问题。我希望每个 DLL 文件都有一个唯一的 ID,以便我可以在数据库中引用它们。我希望能够获取数据库中存储的唯一 ID,然后轻松找到 DLL 并用它做一些事情。根据答案所说,也许我不应该使用 GUID,那么有没有 .Net 方法可以做到这一点?
我有一个服务总线,转换数据的唯一方法是通过 JavaScript。我需要将 Guid 转换为字节数组,以便随后将其转换为 Ascii85 并将其缩小为用于接收客户端点的 20 个字符的字符串。
任何想法将不胜感激。
我想使用 64 位标识符,类似于 Guid 的使用方式。有什么好的方法可以做到这一点?我想保持低碰撞。
public static unsafe long GetLongGuid()
{
unchecked
{
fixed (byte* ptr = Guid.NewGuid().ToByteArray())
return *((long*)ptr) ^ *((long*)(ptr + 8));
}
}
Run Code Online (Sandbox Code Playgroud)
我应该只取高位还是低位?
或者有没有更好的原生 64 位唯一哈希函数?
网络和 StackOverflow 上有大量有关 GUID 的信息。关于独特性的问题确实层出不穷。这不是一个关于2^128唯一性的问题。
我的问题是确定.NET 中 GUID 的第一部分(具体来说是前四个字节)的随机性。根据研究,它被认为是时间戳的最低有效 32 位。但是时间戳是如何转换的呢?这到底有多随机?
有谁知道.NET 的第一部分是如何构建的以及是否真正均匀分布在 4 个字节中?
如何使用时间戳来构造前 32 位?
时钟精度如何影响它?
Microsoft 是否尝试过确保前 4 个字节是否趋于随机?
原因:大量 Guid 使用对于前 4 个字节中的良好随机 GUID 有 2 个主要业务案例。如果每个新 GUID 的分布均匀,则可以根据需要的分区数量使用基于前 1、2、3 或 4 个字节的表分区。我见过一个 20 亿行的表,每天有 1000 万次插入,有 128 个分区,使用前 2 个字节作为分区键。注意,在 DB2 下,必须使用密钥的第一部分。引用 DB2 DBA。这极大地提高了数据库的吞吐量。第二个用途是批处理作业并行密钥分配。如果您知道批处理任务大约有 N 行,则可以将键范围分配给并行作业。如果没有同质分割,调度程序必须首先计算每个作业的起始键和终止键。如果这意味着读取 1 亿个数据并在内存中管理它们只是为了调度工作,那么前 x 分钟就会因作业调度而丢失。在我看到的示例中,时间约为 15 分钟。因此,有 2 个充分的理由使用并希望均匀分布 GUId。
SAP Banking 系统实际上引入了自定义 GUID 例程来解决 GUID 第一部分中缺乏随机性的问题。对于那些有权访问 SAP …
我需要将来自多个 RSS 源的新项目存储在数据库中。我想使用每个项目的 GUID 标签来确定它是否已存在于数据库中。
请参阅W3C 规范:
guid 代表全局唯一标识符。它是唯一标识该项目的字符串。如果存在,聚合器可以选择使用此字符串来确定项目是否是新的。
...
指南的语法没有规则。聚合器必须将它们视为字符串。由提要的来源来确定字符串的唯一性。
所以我的问题是,认为 GUID 在不同的 feed 中是唯一的是否安全?或者我是否需要将 GUID 与其来源的源结合起来,以确保没有重复的 GUID?
我使用这个接受的答案来创建一个指南枚举。
public enum AccessRoles
{
[EnumGuid("2ED3164-BB48-499B-86C4-A2B1114BF1")]
SysAdmin =1,
[EnumGuid("A5690E7-1111-4AFB-B44D-1DF3AD66D435")]
Admin = 2,
[EnumGuid("30558C7-66D9-4189-9BD9-2B87D11190")]
OrgAdmin = 3,
}
class EnumGuid : Attribute
{
public Guid Guid;
public EnumGuid(string guid)
{
Guid = new Guid(guid);
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试检查 Guid 是否是枚举的一部分,即使 userId = 2ED3164-BB48-499B-86C4-A2B1114BF1 是有效的 guid,它也会引发异常 System.InvalidOperationException。
if(Enum.IsDefined(typeof(AccessRoles), userId))
{
}
Run Code Online (Sandbox Code Playgroud)
我尝试将其转换为字符串并进行检查,但这次它不会抛出错误,但不会进入 if 循环。
if(Enum.IsDefined(typeof(AccessRoles), userId.ToString().ToUpper()))
{
}
Run Code Online (Sandbox Code Playgroud)
那么我该如何修复它呢?或者,还有更好的方法?我想避免使用多个 if 语句或 case 语句,因此将其用作枚举,以便它们可以重用。
由于它们包含破折号且仅包含十六进制字符,那么随机字符串(包括特殊字符)不会有更多可能的组合吗?
我知道它们成为标准是一个优势,但您也可以决定使用 N 个字符的随机字符串和某些白名单字符来防止系统上出现不同的格式。
我正在尝试将默认值 NewGuid() 设置为 MySQL 5.7 中的 UUID/GUID 列(在 .Net Core 中使用 FluentMigrator)。
Create.Table("table")
.WithColumn("auto_guid").AsGuid().NotNullable().WithDefaultValue(SystemMethods.NewGuid)
Run Code Online (Sandbox Code Playgroud)
根据 Fluent Migrator文档,应该支持 NewGuid,但出现错误:
“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以获取在附近使用的正确语法……”
我搜索了任何类似的问题和解决方案,但找不到任何。
使用 Fluent Migrator 是否可以在 MySQL 中自动生成 UUID/GUID?
我想生成 UUID 字符串的一致哈希,例如dcc549d8-bd0c-49c2-bff8-f6fa80fb7857,最好是 0 到 N 之间的数字。
最好、最快的方法是什么?
更新:我正在考虑使用 CRC32。它有什么优点/缺点吗?
我有 unity 2019.3.7f1, 2 侧库:
GooglePlayGamesPlugin-0.10.08
GoogleMobileAds-v3.18.3
Run Code Online (Sandbox Code Playgroud)
(它还安装了“最新的 Unity 外部依赖管理器”)
一切都在 Android (apk) 上完美编译
我添加了一个库Firebase 6.13.0并收到以下错误:
我读到你需要删除它们并重新启动项目,它没有帮助,我还重新安装了所有库,它没有帮助。
有没有人遇到过类似的问题?请帮忙解决。