2016-05-03 11 views
0

で呼び出すアセンブリプロジェクト名を取得します。私はMyAwesomeLoggerをインポートし、それを呼び出すMyAwesomeProjectを持ってMVC5

using MyAwesomeLogger; 
using System.Web.Mvc; 

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var Logger = new LogFactory.GetLogger(); 
     Logger.Debug("Hello World"); 

     return View(); 
    } 
} 

LogFactory.GetLogger()方法は、MyAwesomeLoggerとそれがないすべての素晴らしいものの一部の内部にあるあるロガーのファイル名を設定します。私の主な問題は、プロジェクト名を取得し、ログファイル名として設定する必要があることです。これは、コンソールアプリケーションとWebアプリケーションの両方で機能する必要があります。

前にやったことは:Assembly.GetEntryAssembly().GetName().Name;これはコンソールアプリケーションでは機能しますが、Webでは機能しません。私は多くのリンクを見てきましたが、ソリューションのほとんどは、このようなdllからではなく、mvcプロジェクト自体からプロジェクト名を取得する方法を示しています。これを行うための最も簡単な方法は何ですか?

私が試したもう一つは、された:

var type = System.Web.HttpContext.Current.ApplicationInstance.GetType(); 
while (type != null && type.Namespace == "ASP") 
{ 
    type = type.BaseType; 
} 

var fileName = type.Assembly.GetName().Name; 

上記の作品私はにHomeControllerでそれを呼び出すが、MyAwesomeLoggerはHttpContextを知らないので、私はそこにそれを呼び出すことができない場合。

+0

プロジェクト名はアセンブリのどこにでも保持されないので、そのように取得しようとすると苦労するかもしれません。 –

+0

Assembly.GetExecutingAssembly()を試してみてください。しかし、これは奇妙な結果になるかもしれません(あなたがcshtmlで呼び出すと、プリコンパイルされたページなどのDLLが得られるかもしれません) – apr

+0

Assembly.GetCallingAssembly()を試すこともできますか? [link](http://stackoverflow.com/questions/5478814/c-sharp-get-calling-methods-assembly) – apr

答えて

0

プロジェクトの名前が必ずしもプロジェクトのDLLにあるとは限りません。プロジェクトのDLLには任意の名前を付けることができますが、Visual Studioのプロジェクトファイルの名前と一致する必要はありません。だから、それは一般的にプロジェクト名を取得する悪い方法です。

[アプリケーション]タブのプロジェクト設定でDLLにアセンブリ情報を設定できます。

タイトルはdllの名前になります。「XYZ」はコンパイル時に「XYZ.dll」になります。ただし、説明、会社、商品などを設定することもできます。

プロダクトフィールドをプロジェクト名として使用し、プロダクト名に設定することができます。

この情報を取得するには、プロジェクトで[タイプ]を使用してアセンブリを取得する必要があります。 Webアプリケーションのエントリポイントは、必ずしもそれがかみそりビューエンジン、またはASPXビューエンジン可能性があり、サイトのdllファイルではありません、などなど

Type myType = typeof(ThingInMyProject); 
Assembly myAsm = myType.GetAssembly(); 
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(myAsm.Location); 
var title = fvi.Title; 
var companyName = fvi.CompanyName; 
var productName = fvi.ProductName; 

その後、あなたはタイトル「DLLの名前」を使用することができますまたは商品名を表示してください。

+0

'typeof(ThingInMyProject)'とは何ですか?私はあなたがここでどのクラスを参照しようとしているのか分かりません。 – Bojan

+0

擬似コード...あなたのためには、typeof(HomeController)、またはあなたのdllの他のタイプでしょう。 –

+0

問題はHomeControllerになるのか、コンソールアプリケーションで機能するのか分かりません。これはすべてによって呼び出されている外部DLLです。 – Bojan

関連する問題