コードでプロジェクト名を取得しようとしています ( TestGetAssemblyName
):
私は試しましSystem.Reflection.Assembly.GetExecutingAssembly().GetName().Name
たが、これは奇妙な文字の寄せ集めを返し、動的に生成されたように見えます。TestGetAssemblyName
コードを介して私に返される方法はありますか?
コードでプロジェクト名を取得しようとしています ( TestGetAssemblyName
):
私は試しましSystem.Reflection.Assembly.GetExecutingAssembly().GetName().Name
たが、これは奇妙な文字の寄せ集めを返し、動的に生成されたように見えます。TestGetAssemblyName
コードを介して私に返される方法はありますか?
ソリューション エクスプローラーで読み取った内容は、コンパイル済みのアセンブリ名やアセンブリ タイトルとはまったく関係ありません。さらに、コンパイルされたアセンブリのどこにも書き込まれないため、コードからその名前にアクセスすることはできません。
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 %> />
あなたのプロジェクトはウェブサイトだと思います。
問題は、Web サイトがその中にあるすべてのフォルダーに対して dll を生成することです。それがさまざまな App_Web_asdkfjh.dll です。
Web サイトを公開すると、VS はこれらすべての DLL を 1 つに結合します。展開プロジェクトのプロパティで、プロジェクトの名前を含めて、これに好きな名前を付けることができます。
展開プロジェクトがなければ、ランダムに見えるファイル名で立ち往生しています。