Получить сборку, где экземпляр объявлен в XAML - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть framework.dll, customerFramework.dll и customer.exe.

Внутри framework.dll объявлено customControl, которое может быть помещено в customerFramework.dllXAMLpage / window) или в customer.exeXAML page / window).

customControl получил общедоступный DependencyProperty типа Uri.Visual Studio поддерживает IntelliSense для своих ресурсов, поэтому очень легко установить эти свойства.

Во время выполнения CustomControl пытается разрешить ресурсы внутри framework.dll, но они объявлены в:

  1. customer.exe
    • ИсправитьДля устранения этой проблемы необходимо установить следующий префикс: /customer;component/ballon.svg.
  2. customerFramework.dll
    • Чтобы устранить эту проблему, необходимо установить следующий префикс: /customerFramework;component/ballon.svg.

Но если я это сделаю, у меня не будет IntelliSense.Поэтому я хотел бы объединить правильное uri, добавив префикс в коде позади.

flowchart


То, что я хочу знать, этоимя сборки внутри customControl, где был размещен customControl.

Если customControl помещен в customerFramework.dll и я использую методы Assembly.(), я получаю неверную информацию ( ожидаемое значение: customerFramework ):

  • GetEntryAssembly(): customer.exe
  • GetCallingAssembly(): framework.dll
  • GetExecutingAssembly(): framework.dll

Есть ли скрытая функция для получения этой информации?


1 Ответ

0 голосов
/ 18 февраля 2019

извините, я неправильно понял вопрос.

пожалуйста, используйте отражение с помощью stacktrace

var currentAssembly = Assembly.GetExecutingAssembly();
        var callerAssemblies = new StackTrace().GetFrames()
                .Select(x => x.GetMethod().ReflectedType.Assembly).Distinct()
                .Where(x => x.GetReferencedAssemblies().Any(y => y.FullName == currentAssembly.FullName));
        var initialAssembly = callerAssemblies.Last();

Код будет медленным, потому что он использует отражение.удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...