我想在我的Microsoft Visual C#2008 Express Edition项目的程序集信息中使用GUID,以便在用于验证只有一个应用程序实例正在运行的Mutex中使用。如何访问GUID?我只需要在Program.Main(...)
函数中使用它。感谢。
答案 0 :(得分:4)
在MSDN上提出了类似的问题:
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/5faa901a-7e70-41f4-a096-3e6053afd5ec
以下是代码exerpt:
public static T GetAssemblyAttribute<T>(Assembly assembly) where T : Attribute
{
if (assembly == null) return null;
object[] attributes = assembly.GetCustomAttributes(typeof(T), true);
if (attributes == null) return null;
if (attributes.Length == 0) return null;
return (T)attributes[0];
}
某些值也可通过Assembly
类型获得:
How do I programmatically get the GUID of an application in .net2.0
答案 1 :(得分:1)
您可以调用静态GetExecutingAssembly method on Assembly来获取当前正在执行的程序集。
但是,除非你有一个与程序集关联的Guid attribute,否则你不能保证一直有一个与程序集关联的Guid。
如果你有一个与程序集关联的Guid属性,那么你可以获取程序集实例并在其上调用GetCustomAttributes,它将返回与程序集关联的Guid属性,然后您可以查询该程序集GUID。
但是,我建议使用应用程序入口点的完全限定类型名称作为名称。它具有更好的语义含义,并且具有汇编资格,使其具有相当大的独特性。
如果您担心其他人使用该值来阻止您的应用程序运行,那么使用Guid并不是那么安全,有人可以随时反映您的程序集并获得Guid的价值。