Answers:
请尝试以下代码。您要查找的值存储在附加到Assembly的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);
}
ctrl+.
是你的朋友
System.AppDomain.DomainManager.get returned null.
一个简单的控制台应用程序。似乎Assembly.GetEntryAssembly()
是首选方式。
另一种方法是使用Marshal.GetTypeLibGuidForAssembly。
根据msdn:
将程序集导出到类型库时,将为该类型库分配一个LIBID。您可以通过在程序集级别应用System.Runtime.InteropServices.GuidAttribute来显式设置LIBID,也可以自动生成。Tlbimp.exe(类型库导入器)工具根据程序集的标识来计算LIBID值。如果应用了属性,则GetTypeLibGuid返回与GuidAttribute关联的LIBID。否则,GetTypeLibGuidForAssembly返回计算的值。或者,可以使用GetTypeLibGuid方法从现有的类型库中提取实际的LIBID。
Assembly.ReflectionOnlyLoad
不加载相关程序集,此方法也可以使用。
System.Runtime.InteropServices.Marshal.GetTypeLibGuidForAssembly(System.Reflection.Assembly.GetExecutingAssembly()).ToString()
。看起来比其他方法简单得多。有没有缺点?
或者,同样简单:
string assyGuid = Assembly.GetExecutingAssembly().GetCustomAttribute<GuidAttribute>().Value.ToUpper();
为我工作...
您应该能够通过反射读取装配的Guid属性。这将获取当前程序集的GUID
Assembly asm = Assembly.GetExecutingAssembly();
var attribs = (asm.GetCustomAttributes(typeof(GuidAttribute), true));
Console.WriteLine((attribs[0] as GuidAttribute).Value);
如果您想读取AssemblyTitle,AssemblyVersion等内容,也可以将GuidAttribute替换为其他属性。
您也可以加载另一个程序集(Assembly.LoadFrom和all),而不是获取当前程序集-如果您需要读取外部程序集的这些属性(例如-加载插件时)
万一其他人正在寻找开箱即用的工作示例,这就是我根据先前的答案最终使用的示例。
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();
}
}