C #: поиск пути к PresentationCore.dll (и другим сборкам) в GAC - PullRequest
0 голосов
/ 15 сентября 2018

Мне нужно сослаться на различные сборки в CSharpCodeProvider через вызов ReferencedAssemblies.Add.

Для некоторых сборок достаточно просто передать имя сборки - например, ReferencedAssemblies.Add("System.dll").

Однако, PresentationCore.dll - это один из тех, где требуется полный путь к сборке - что я не обязательно знаю на целевой машине.

Вопрос:

Какя могу найти окончательный путь к (последней?) соответствующей сборке - скажем, в GAC?

В идеале решение будет работать не только для PresentationCore.dll, но и для других сборок, таких как PresentationFramework.dll, System.Xaml.dll или System.Windows.Forms.

Источники, которые не 't дает ожидаемые результаты:

  • Это решение будет включать жесткое кодирование определенного пути, но решение должно быть динамическим
  • Реализация этой WindowsAPI может работать;но я не знаю, как - или если бы это даже помогло решить вышеупомянутый
  • Этот C ++ вопрос относится к тому, где находится GAC, но не к тому, как получить фактический путь к файлу

1 Ответ

0 голосов
/ 15 сентября 2018

Вы можете ссылаться на сборки в коде, который должен выполнять разрешение. Затем среда выполнения сообщит вам место сборки:

typeof([TypeKnownToBeInTheDesiredAssembly]).Assembly.CodeBase

например, чтобы найти System.Xml.dll:

string codeBase = typeof(System.Xml.XmlDocument).Assembly.CodeBase;
UriBuilder uri = new UriBuilder(codeBase);
string path = Uri.UnescapeDataString(uri.Path);
Console.WriteLine(path);

[ссылка]

В моей системе:

C: /Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll

...