C#:在GAC中找到PresentationCore.dll(和其他程序集)的路径

时间:2018-09-15 16:50:49

标签: c# .net reflection gac csharpcodeprovider

我需要通过调用CSharpCodeProvider来引用ReferencedAssemblies.Add中的各种程序集。

对于某些程序集,只需传递程序集名称即可,例如ReferencedAssemblies.Add("System.dll")

但是,PresentationCore.dll是需要完整程序集路径的程序之一-我可能不一定在目标计算机上知道它。

问题:

  

如何找到(最新?)各个程序集的确定路径-例如,在GAC中?

     

理想情况下,该解决方案不仅适用于PresentationCore.dll,而且适用于其他程序集,例如PresentationFramework.dllSystem.Xaml.dllSystem.Windows.Forms

未获得预期结果的来源:

  • This solution将涉及对特定路径进行硬编码,但是解决方案应该是动态的
  • 实施this Windows API可能有效;但我不知道如何-甚至是否可以解决上述问题
  • This C ++问题是指在哪里找到GAC,而不是如何获取实际文件路径

1 个答案:

答案 0 :(得分:0)

您可以在应该执行解析的代码中引用程序集。然后,运行时将告诉您程序集的位置:

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);

[ref]

在我的系统上:

  

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