0

У меня есть MyAwesomeProject, который импортирует MyAwesomeLogger и называет его:Получить Calling Название проекта Ассамблеи в 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 и части всех замечательных вещей, которые она делает, это устанавливает имя файла регистратора , Моя основная проблема заключается в том, что мне нужно захватить имя проекта и установить его как имя файла журнала, и это должно работать как для консольных приложений, так и для веб-приложений.

Что я пытался сделать раньше: Assembly.GetEntryAssembly().GetName().Name; Хотя это работает для консольных приложений, оно не работает для Интернета. Я прошел через множество ссылок, но большинство решений показывают, как получить название проекта из проекта mvc, а не из dll, подобного этому. Каков самый простой способ доказать это глупо?

Другая вещь, которую я попытался было:

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 проекта может быть любым именем, она не должна совпадать с именем файла проекта в визуальной студии. Так что это, как правило, плохой способ получить название проекта.

Вы можете установить информацию о сборке в своей DLL в настройках проекта на вкладке «Приложение».

Название будет названием dll «XYZ» будет «XYZ.dll» при компиляции. Однако вы также можете установить описание, компанию, продукт и т. Д.

Вы можете использовать поле «Продукт» в качестве имени своего проекта и указать его имя.

Для получения этой информации вы должны использовать Тип в своем проекте для получения сборки. В веб-приложение, точка входа не обязательно будет длл вашего сайта, это может быть вид двигателя бритвы, или вид двигателя ASPX, и т.д. и т.п.

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; 

Затем вы можете использовать Title «Название Dll» или название продукта, как вы сочтете нужным.

+0

Что такое 'typeof (ThingInMyProject)'? Я не уверен, какой класс вы пытаетесь сослаться здесь. – Bojan

+0

Псевдо код ... для вас это будет typeof (HomeController) или любой другой тип в вашей DLL. –

+0

проблема заключается в том, что я не знаю, будет ли это быть HomeController или какой-либо функцией из консольного приложения. Это внешняя dll, которую все называют. – Bojan