我需要在C#.NET2.0中访问我的项目的程序集.
我可以在项目属性下的"程序集信息"对话框中看到GUID,目前我刚刚将它复制到代码中的const.GUID永远不会改变,所以这不是解决方案的坏处,但直接访问它会很好.有没有办法做到这一点?
我一直在查看本教程中的代码,我发现它用于My.Computer.Name保存不应在计算机之间漫游的设置.但是,完全有可能用户拥有两台名称相同的PC.例如,如果他们想在每台PC上拥有相同的用户名,他们最终可能会得到两台名为Username-PC的PC.
识别不同PC有哪些好方法?PC是否有与之关联的GUID,或者我是否应该考虑从某些硬件中提取序列号?我不关心通过重新安装Windows是否仍然存在.
(我链接的教程是在VB.Net中,但我在C#中实现它)
我需要GUID在一个非托管的Windows C++项目中创建一个.我已经习惯了C#,我会用它Guid.NewGuid().什么是(非托管窗口)C++版本?
GUID的标准字符串表示形式大约需要36个字符.哪个非常好,但也非常浪费.我想知道如何使用33-127范围内的所有ASCII字符以最短的方式对其进行编码.天真的实现产生22个字符,因为128位/6位产生22个字符.
霍夫曼编码是我的第二好,唯一的问题是如何选择代码....
当然,编码必须是无损的.
我需要一个函数来向Excel中的单元格添加GUID.我在stackoverflow上找到了上一个问题,但它无效.它建议以下功能:
=CONCATENATE(DEC2HEX(RANDBETWEEN(0,4294967295),8),"-",DEC2HEX(RANDBETWEEN(0,6553??5),4),"-
",DEC2HEX(RANDBETWEEN(16384,20479),4),"-",DEC2HEX(RANDBETWEEN(32768,49151??),4),"-
",DEC2HEX(RANDBETWEEN(0,65535),4),DEC2HEX(RANDBETWEEN(0,4294967295),8))
Run Code Online (Sandbox Code Playgroud)
我一直无法使concatenate方法工作,所以尝试使用"&"图来连接.这似乎有效,但后来我在第二个DEX2HEX块上出现了一个莫名其妙的错误:DEC2HEX(RANDBETWEEN(0,6553 5),4).Excel公式评估员说这是无效的,但我似乎无法弄清楚为什么.有任何想法吗?
我已经在代码中制作了两次相同的bug,如下所示:
void Foo(Guid appId, Guid accountId, Guid paymentId, Guid whateverId)
{
...
}
Guid appId = ....;
Guid accountId = ...;
Guid paymentId = ...;
Guid whateverId =....;
//BUG - parameters are swapped - but compiler compiles it
Foo(appId, paymentId, accountId, whateverId);
Run Code Online (Sandbox Code Playgroud)
好的,我想防止这些错误,所以我创建了强类型的GUID:
[ImmutableObject(true)]
public struct AppId
{
private readonly Guid _value;
public AppId(string value)
{
var val = Guid.Parse(value);
CheckValue(val);
_value = val;
}
public AppId(Guid value)
{
CheckValue(value);
_value = value;
}
private static void CheckValue(Guid value)
{ …Run Code Online (Sandbox Code Playgroud) 我正在尝试替换一个调用,::CoCreateGUID因此我可以在Linux上的C++程序中生成GUID.
我对Ubuntu/GCC/Linux有点新意,所以我开始这样:
#include <uuid/uuid.h>
Run Code Online (Sandbox Code Playgroud)
而现在我被卡住了!:) G ++找不到uuid.h,我不知道如何获取/找到它.
在Visual Studio中创建新的C#项目时,生成的AssemblyInfo.cs文件包含指定程序集GUID的属性.属性上方的注释表明它"如果此项目暴露给COM".
我的程序集都没有包含需要对COM可见的类型,因此我已经标记了我的程序集[assembly: ComVisible(false)].那么指定GUID有什么意义吗?
我的感觉是答案是"不" - 那么为什么默认的AssemblyInfo.cs文件包含[assembly: ComVisible(false)]和[assembly: Guid("...")]?
编辑:
总结一下回答:
在它们之间,答案解释了当且仅当正在使用COM互操作时才需要指定GUID.所以,在我的情况下,没有必要使用GUID.
sharptooth进一步解释说,[assembly: ComVisible(false)]并不意味着不使用COM互操作,因为可以覆盖ComVisible各个类型.因此,默认的AssembyInfo.cs包含两者[assembly: ComVisible(false)]和GUID.
我有一个GUID变量,我想在文本文件中写入其值.GUID定义是:
typedef struct _GUID { // size is 16
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;
Run Code Online (Sandbox Code Playgroud)
但我想写下它的价值:
CA04046D-0000-0000-0000-504944564944
Run Code Online (Sandbox Code Playgroud)
我观察到:
Data1 保存CA04046D的十进制值Data2 保持0的十进制值Data3 保存下一个0的十进制值但其他人呢?
我必须解释自己这个值才能得到那个输出,或者有更直接的方法来打印这样的变量?
我在手动调试.NET应用程序时遇到困难,其中Guid值从.NET到Oracle不同.
17D89D326C2142D69B989F5201288DBF329DD817216CD6429B989F5201288DBF我怎么能够手动调试,即从C#的GUID能够将该值粘贴到oracle查询中并获得正确的结果(反之亦然)?