[c#] .net2.0에서 응용 프로그램의 GUID를 프로그래밍 방식으로 가져 오는 방법

C # .NET2.0에서 내 프로젝트의 어셈블리에 액세스해야합니다.

프로젝트 속성 아래의 ‘어셈블리 정보’대화 상자에서 GUID를 볼 수 있으며 현재 코드의 const에 복사했습니다. GUID는 절대 변경되지 않으므로 솔루션이 그렇게 나쁘지는 않지만 직접 액세스하는 것이 좋습니다. 이 작업을 수행하는 방법이 있습니까?



답변

다음 코드를 시도하십시오. 찾고있는 값은 어셈블리에 연결된 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);
}


답변

또 다른 방법은 Marshal.GetTypeLibGuidForAssembly 를 사용하는 것 입니다.

msdn에 따르면 :

어셈블리를 형식 라이브러리로 내 보내면 형식 라이브러리에 LIBID가 할당됩니다. 어셈블리 수준에서 System.Runtime.InteropServices.GuidAttribute를 적용하여 LIBID를 명시 적으로 설정하거나 자동으로 생성 할 수 있습니다. Tlbimp.exe (형식 라이브러리 가져 오기 도구) 도구는 어셈블리 ID를 기반으로 LIBID 값을 계산합니다. GetTypeLibGuid는 특성이 적용된 경우 GuidAttribute와 연결된 LIBID를 반환합니다. 그렇지 않으면 GetTypeLibGuidForAssembly가 계산 된 값을 반환합니다. 또는 GetTypeLibGuid 메서드를 사용하여 기존 형식 라이브러리에서 실제 LIBID를 추출 할 수 있습니다.


답변

또는 간단합니다.

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();
        }
    }


답변

appID를 얻으려면 다음 코드 줄을 사용할 수 있습니다.

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

이를 위해 다음을 포함해야합니다. System.Runtime.InteropServices;


답변

다른 답변으로는 운이 없지만이 멋진 라이너로 해결했습니다.

((GuidAttribute)(AppDomain.CurrentDomain.DomainManager.EntryAssembly).GetCustomAttributes(typeof(GuidAttribute), true)[0]).Value

도움이 되었기를 바랍니다!