回答:
次のコードを試してください。探している値は、アセンブリにアタッチされた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();
}
}