如何以编程方式获取.net2.0中应用程序的GUID

我需要在C#.NET2.0中访问我的项目的程序集。

我可以在项目属性下的“Assembly Information”对话框中看到GUID,此刻我刚把它复制到代码中的const中。 GUID永远不会改变,所以这不是一个解决scheme的坏处,但它将是很好的直接访问它。 有没有办法做到这一点?

编辑:对那些坚持downvoting …无法删除这个答案,因为它是接受的版本。 因此,我正在编辑以包含正确的答案(下面的JaredPar的代码 )

如果你只想得到执行程序集,就足够简单了:

using System.Reflection; Assembly assembly = Assembly.GetExecutingAssembly(); //The following line (part of the original answer) is misleading. //**Do not** use it unless you want to return the System.Reflection.Assembly type's GUID. Console.WriteLine(assembly.GetType().GUID.ToString()); // The following is the correct code. var attribute = (GuidAttribute)assembly.GetCustomAttributes(typeof(GuidAttribute),true)[0]; var id = attribute.Value; 

尝试下面的代码。 您正在查找的值存储在附加到程序集的GuidAttribute实例上

 using System.Runtime.InteropServices; static void Main(string[] args) { var assembly = typeof(Program).Assembly; var attribute = (GuidAttribute)assembly.GetCustomAttributes(typeof(GuidAttribute),true)[0]; var id = attribute.Value; Console.WriteLine(id); } 

您应该能够通过reflection读取程序集的Guid属性。 这将获得当前程序集的GUID

  Assembly asm = Assembly.GetExecutingAssembly(); var attribs = (asm.GetCustomAttributes(typeof(GuidAttribute), true)); Console.WriteLine((attribs[0] as GuidAttribute).Value); 

如果你想阅读像AssemblyTitle,AssemblyVersion等的东西,你也可以用其他属性replaceGuidAttribute

您也可以加载另一个程序集(Assembly.LoadFrom和all)而不是获取当前程序集 – 如果您需要读取外部程序集的这些属性(例如 – 加载插件时)

另一种方法是使用Marshal.GetTypeLibGuidForAssembly 。

根据msdn:

将程序集导出到types库时,将为types库分配一个LIBID。 您可以通过在程序集级别应用System.Runtime.InteropServices.GuidAttribute来显式设置LIBID,也可以自动生成LIBID。 Tlbimp.exe(types库导入程序)工具基于程序集的标识计算LIBID值。 如果应用了该属性,则GetTypeLibGuid返回与GuidAttribute关联的LIBID。 否则,GetTypeLibGuidForAssembly返回计算的值。 或者,您可以使用GetTypeLibGuid方法从现有的types库中提取实际的LIBID。

如果其他人正在寻找一个开箱即用的例子,这就是我根据以前的答案结束了使用。

 using System.Reflection; using System.Runtime.InteropServices; label1.Text = "GUID: " + ((GuidAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(GuidAttribute), false)).Value.ToUpper(); 

更新:

由于这一点已经得到了一些关注,我决定采用另一种方式做我一直在使用。 这样可以让你从静态类中使用它:

  /// <summary> /// public GUID property for use in static class </summary> /// <returns> /// Returns the application GUID or "" if unable to get it. </returns> static public string AssemblyGuid { get { object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(GuidAttribute), false); if (attributes.Length == 0) { return String.Empty; } return ((System.Runtime.InteropServices.GuidAttribute)attributes[0]).Value.ToUpper(); } } 

要获取appID,您可以使用以下代码行:

 var applicationId = ((GuidAttribute)typeof(Program).Assembly.GetCustomAttributes(typeof(GuidAttribute), true)[0]).Value; 

为此,您需要包含System.Runtime.InteropServices;