我需要通过调用ReferencedAssemblies.Add
来引用CSharpCodeProvider
中的各种程序集。
对于某些程序集,只需传递程序集名称就足够了 - 例如ReferencedAssemblies.Add("System.dll")
.
但是,PresentationCore.dll
是需要程序集的完整路径之一 - 我不一定知道目标机器上的路径。
问题:
如何找到到(最新?(相应程序集的最终路径 - 例如,在 GAC 中?
理想情况下,该解决方案不仅适用于
PresentationCore.dll
,也适用于其他组件,如PresentationFramework.dll
、System.Xaml.dll
或System.Windows.Forms
。
未产生预期结果的来源:
- 此解决方案将涉及对特定路径进行硬编码,但解决方案应该是动态的
- 实现这个Windows API可能会起作用;但我不知道如何 - 或者它是否有助于解决上述问题
- 这个C++问题是指 GAC 的位置,而不是如何获取实际的文件路径
可以在应执行解析的代码中引用程序集。然后运行时会告诉你程序集位置:
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