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
도움이 되었기를 바랍니다!