У меня странная проблема с GetCallingAssembly ... У меня есть основное приложение WPF, которое загружает данные из разных сборок, просматривающих реализованный интерфейс. Когда я выполняю код под VS (выпуск), я получил правильную сборку вызовов (например, Modules.Calendar, Modules.Reporting и т. Д.). Когда я запускаю его из автономного (выпуск), я получил CallingAssembly, который указывает на exe основного приложения WPF, и поэтому он не будет корректно выполнять свои обязанности (что в данном конкретном случае - загрузка элементов меню)GetCallingAssembly отличается при атаке на визуальную студию против автономного
Каждый модуль реализует следующий код
public class MenuRegisterService : MenuRegisterServiceBase
{
Assembly.GetCallingAssembly() correctly filled
public override Task<MenuItemNode> RegisterMenu(ICollection<string> functions)
{
return base.RegisterMenu(functions);
}
}
и вот метод Base
public virtual Task<MenuItemNode> RegisterMenu(ICollection<string> functions)
{
try
{
var assembly = Assembly.GetCallingAssembly(); //I should get the module that invoked the base class
log.Info("->" + assembly.FullName);
string filename = GetFullFileName(assembly, MenuFilename);
return Task.Factory.StartNew(() =>
{
string xmlFileName = string.Format(filename);
var doc = new XmlDocument();
using (Stream stream = assembly.GetManifestResourceStream(xmlFileName))
{
if (stream != null)
{
using (var reader = new StreamReader(stream))
{
doc.LoadXml(reader.ReadToEnd());
}
}
}
MenuItemNode menu = BuildMenu(doc.SelectSingleNode(@"/Node"), functions);
return menu;
});
}
catch (Exception ex)
{
log.Error(ex);
return null;
}
}
Что я делаю неправильно? Thanks