8

私はこれを行うことができました

return Assembly.GetEntryAssembly().GetName().Name;

また

return Path.GetFileNameWithoutExtension(Application.ExecutablePath);

両方とも常に目的のアプリケーション名を付けますか? もしそうなら、アプリケーション名を取得するより標準的な方法はどれですか? それでも勝てない状況である場合、ある方法が他の方法よりも速いというようなことはありますか? それとも他の正しいアプローチがありますか?

4

3 に答える 3

11

Application.ProductNameApplication.ProductVersionを見てください。

于 2012-03-03T11:18:44.363 に答える
4

アプリケーション名と見なすものに応じて、3 番目のオプションもあります。アセンブリ タイトルまたは製品名を取得します (これらは通常 で宣言されAssemblyInfo.csます)。

object[] titleAttributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), true);
if (titleAttributes.Length > 0 && titleAttributes[0] is AssemblyTitleAttribute)
{
    string assemblyTitle = (titleAttributes[0] as AssemblyTitleAttribute).Title;
    MessageBox.Show(assemblyTitle);
}

また:

object[] productAttributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), true);
if (productAttributes.Length > 0 && productAttributes[0] is AssemblyProductAttribute)
{
    string productName = (productAttributes[0] as AssemblyProductAttribute).Product;
    MessageBox.Show(productName);
}
于 2012-03-03T11:21:21.747 に答える
1

「アプリケーション名」をどのように定義するかによって異なります。

Application.ExecutablePath実行可能ファイル名を含む、アプリケーションを起動した実行可能ファイルのパスを返します。これは、誰かがファイルの名前を変更すると、値が変更されることを意味します。

Assembly.GetEntryAssembly().GetName().Nameアセンブリの単純な名前を返します。これは通常、アセンブリのマニフェスト ファイルのファイル名から拡張子を引いたものですが、必ずしもそうである必要はありません。

そのため、GetName().Name の方が手頃なようです。

より速いものについては、わかりません。GetName() ではリフレクションが必要なため、ExecutablePath は GetName() よりも高速であると思いますが、これは測定する必要があります。

編集:

このコンソール アプリをビルドして実行し、Windows ファイル エクスプローラーを使用して実行可能ファイルの名前を変更し、名前を変更した実行可能ファイルをダブルクリックして直接実行してください。
ExecutablePath は変更を反映し、アセンブリ名は同じままです

using System;
using System.Reflection;
using System.Windows.Forms;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Assembly.GetEntryAssembly().GetName().Name);
            Console.WriteLine(Application.ExecutablePath);
            Console.ReadLine();
        }
    }
}
于 2012-03-03T11:13:06.427 に答える