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);
}
編集:ダウン投票を主張する人に...この回答は受け入れられているため、削除できません。したがって、正しい答えを含めるように編集しています( JaredPar's code below)
実行アセンブリのみを取得する場合は十分に簡単です。
using System.Reflection;
Assembly assembly = Assembly.GetExecutingAssembly();
//The following line (part of the original answer) is misleading.
//**Do not** use it unless you want to return the System.Reflection.Assembly type's GUID.
Console.WriteLine(Assembly.GetType().GUID.ToString());
// The following is the correct code.
var attribute = (GuidAttribute)Assembly.GetCustomAttributes(typeof(GuidAttribute),true)[0];
var id = attribute.Value;
別の方法は、 Marshal.GetTypeLibGuidForAssembly を使用することです。
Msdnによると:
アセンブリがタイプライブラリにエクスポートされると、タイプライブラリにはLIBIDが割り当てられます。 System.Runtime.InteropServices.GuidAttributeをアセンブリレベルで適用することにより、LIBIDを明示的に設定することも、自動的に生成することもできます。 Tlbimp.exe(タイプライブラリインポーター)ツールは、アセンブリのIDに基づいてLIBID値を計算します。 GetTypeLibGuidは、属性が適用されている場合、GuidAttributeに関連付けられているLIBIDを返します。それ以外の場合、GetTypeLibGuidForAssemblyは計算値を返します。または、GetTypeLibGuidメソッドを使用して、既存のタイプライブラリから実際のLIBIDを抽出できます。
リフレクションを介してアセンブリの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およびすべて)をロードすることもできます-外部アセンブリのこれらの属性を読み取る必要がある場合(例-プラグインのロード時)
他の誰かがすぐに使用できるサンプルを探している場合、これは以前の回答に基づいて使用したものです。
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();
}
}
または、同じくらい簡単:
string assyGuid = Assembly.GetExecutingAssembly().GetCustomAttribute<GuidAttribute>().Value.ToUpper();
私のために働く...
AppIDを取得するには、次のコード行を使用できます。
var applicationId = ((GuidAttribute)typeof(Program).Assembly.GetCustomAttributes(typeof(GuidAttribute), true)[0]).Value;
このためには、System.Runtime.InteropServices;
を含める必要があります