0

コードでプロジェクト名を取得しようとしています ( TestGetAssemblyName):

ここに画像の説明を入力

私は試しましSystem.Reflection.Assembly.GetExecutingAssembly().GetName().Nameたが、これは奇妙な文字の寄せ集めを返し、動的に生成されたように見えます。TestGetAssemblyNameコードを介して私に返される方法はありますか?

4

2 に答える 2

1

ソリューション エクスプローラーで読み取った内容は、コンパイル済みのアセンブリ名やアセンブリ タイトルとはまったく関係ありません。さらに、コンパイルされたアセンブリのどこにも書き込まれないため、コードからその名前にアクセスすることはできません。

MyTypeがアセンブリで定義されている型であると仮定すると、AssemblyTitleAttribute属性 (通常は で定義AssemblyInfo.cs) を使用して、指定されたタイトルを読み取ることができます (コンパイルされたアセンブリ名またはコードの名前空間とは関係ありません)。

var assembly = typeof(MyType).Assembly;
var attribute = assembly
    .GetCustomAttributes(typeof(AssemblyTitleAttribute), true)
    .OfType<AssemblyTitleAttribute>()
    .FirstOrDefault();

var title = attribute != null ? attribute.Title : "";

この ( AssemblyTitleAttribute) は、 で定義されているアトリビュートの 1 つにすぎませAssemblyInfo.csん。要件に最も適したアトリビュートを選択してください。

逆に、アセンブリ名 (Nameプロパティ from Assembly) を使用して、コンパイルされたアセンブリ名を取得できます (これも、アセンブリ タイトルやプロジェクト タイトルとは異なる場合があります)。

編集
それを単一行にするには、コードのどこかに(もちろん!)配置する必要があります:

public static class App
{
    public static string Name
    {
         get
         {
             if (_name == null)
             {
                 var assembly = typeof(App).Assembly;
                 var attribute = assembly
                     .GetCustomAttributes(typeof(AssemblyTitleAttribute), true)
                     .OfType<AssemblyTitleAttribute>()
                     .FirstOrDefault();

                _name = attribute != null ? attribute.Title : "";
             }

             return _name;
         }
    }

    private string _name;
}

用途:

<a href="server/App?appName=<% App.Name %> /> 
于 2013-11-26T17:14:35.747 に答える
0

あなたのプロジェクトはウェブサイトだと思います。

問題は、Web サイトがその中にあるすべてのフォルダーに対して dll を生成することです。それがさまざまな App_Web_asdkfjh.dll です。

Web サイトを公開すると、VS はこれらすべての DLL を 1 つに結合します。展開プロジェクトのプロパティで、プロジェクトの名前を含めて、これに好きな名前を付けることができます。

展開プロジェクトがなければ、ランダムに見えるファイル名で立ち往生しています。

于 2013-11-26T17:17:35.457 に答える