У меня есть 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, так что я не могу назвать его там.
Обратите внимание, что имя проекта не сохраняется нигде в сборе - так что вам может быть трудно найти его таким образом ... –
Вы можете попробовать Assembly.GetExecutingAssembly(). Но это может привести к странным результатам (важно, когда вы это называете, если вы вызываете его в cshtml, вы можете получить dll для предварительно скомпилированной страницы и т. Д.) – apr
Вы также можете попробовать Assembly.GetCallingAssembly()? [link] (http://stackoverflow.com/questions/5478814/c-sharp-get-calling-methods-assembly) – apr