У меня есть служба, которая создает домен приложения и запускает его:
this._appDomain = AppDomain.CreateDomain(this._appName, AppDomain.CurrentDomain.Evidence, appDomainSetup);
this._startStopControllerToRun = (IStartStop)this._appDomain.CreateInstanceFromAndUnwrap(assemblyName, this._fullyQualifiedClassName);
this._startStopControllerToRun.Start();
Это уже давно работает хорошо. Проблема заключается в том, что контроллер, запущенный в этом домене приложения, вызывает класс ведения журнала фреймворка. Регистратор получает имя сборки записи и записывает его как источник в журнале событий. Вот как регистратор получает имя источника (вызывающего):
private static string GetSource()
{
try
{
var assembly = Assembly.GetEntryAssembly();
// GetEntryAssembly() can return null when called in the context of a unit test project.
// That can also happen when called from an app hosted in IIS, or even a windows service.
if (assembly == null)
{
// From http://stackoverflow.com/a/14165787/279516:
assembly = new StackTrace().GetFrames().Last().GetMethod().Module.Assembly;
}
return assembly.GetName().Name;
}
catch
{
return "Unknown";
}
}
Прежде чем добавить эту проверку if, регистратор записывает «Неизвестно» для источника. После некоторых исследований я добавил эту попытку в блок if. Теперь регистратор записывает «mscorlib» в качестве источника (имя сборки записи).
Это обзор: Хост -> Контроллер (работает в домене приложения)
Как я могу получить имя сборки (с контроллером), работающей в домене?
Примечание. Я также пробовал это (ниже), но это дает мне имя фреймворка, в котором существует класс ведения журнала (а не имя сборки, в которой работает контроллер в домене приложения):
assembly = Assembly.GetExecutingAssembly();
Logger.Log("MyApp", message);- person Bob Horn   schedule 11.06.2013