c# - 解析 .NET 应用程序使用的库路径

标签 c# .net dll assemblies assembly-resolution

我想找到给定 .NET 应用程序中使用的库的完整路径。

这些都是引用的程序集 (作为AssemblyNames 获得)P/Invoke/DllImported 函数 (仅作为 dll 名称获得)


所以基本上我正在搜索这两种方法的内容,其中 executablePath 是第三方 .NET 应用程序的路径,它可能与我的程序完全不同。

static string ResolveAssemblyPath(AssemblyName name, string executablePath)
{
    // ...
}

static string ResolveDllPath(string name, string executablePath)
{
    // ...
}

重要的是,这些找到的库在确定其完整路径的过程中不执行任何代码!(DllMain模块初始化程序、 ...)

在任何情况下都可能吗?猜错了不是一个选项。

最佳答案

这是可能的,但您需要复制 windows 加载程序的搜索顺序,这对于 native 和托管模块,甚至是 windows 版本都是不同的。我已经在各种博客中看到它以不同级别的详细信息发布,但我手头没有。它似乎也记录在 MSDN 中。 ,所以看看这是否适合您。

无论如何,如果不能猜错,那你就有问题了,因为任何 future 的 Windows 版本都可以扩展或修改搜索顺序,所以你不会向上兼容 future 的 Windows 版本。

也有重定向 windows 加载程序的规则,例如。通过 list 或注册表,如果您想要准确的覆盖范围,您还必须复制它们。

关于c# - 解析 .NET 应用程序使用的库路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8196651/

相关文章:

c# - 记录 WPF 项目时的最佳实践

c# - 如何判断分部方法没有实现

.NET DeflateStream 与 linux zlib 的区别

.net - 重复追加到列表直到抛出异常

c# - 在引用中找不到 System.Drawing.dll

c++ - JNI system.loadlibrary 问题 - 使用 C 库的 native C++ dll

c# - 编写 C# 属性的最短方式?

c# - 无法将 thrift c# 客户端连接到 python 服务器

c# - 无法在 C# 项目中加载 cvextern

c - 如何使 LoadLibrary 在缺少依赖项时显示错误对话框