답변:
다음 코드를 시도하십시오. 찾고있는 값은 어셈블리에 연결된 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 (형식 라이브러리 가져 오기 도구) 도구는 어셈블리 ID를 기반으로 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();
}
}