我想找到给定 .NET 应用程序中使用的库的完整路径。
这些都是引用的程序集 (获取为AssemblyName
s)和 P / Invoke / {{ 1}} ed函数 (仅作为dll名称获取)。
所以基本上我正在搜索这两种方法的内容,其中DllImport
是第三方.NET应用程序的路径,它可能与我的程序完全不同。 < / p>
executablePath
这些找到的库在确定其完整路径的过程中不执行任何代码非常重要!(static string ResolveAssemblyPath(AssemblyName name, string executablePath)
{
// ...
}
static string ResolveDllPath(string name, string executablePath)
{
// ...
}
,模块初始化程序,... )
在每种情况下都可以吗?这不是猜错的选择。
答案 0 :(得分:1)
这是可能的,但您需要复制Windows加载程序的搜索顺序,这对于本机和托管模块甚至Windows版本都有所不同。我已经看到它在各种博客中发布了不同级别的详细信息,但我手边没有。它似乎也记录在MSDN中,所以看看它是否适合你。
无论如何,如果猜错都不是你选择的问题,因为任何未来的Windows版本都可以扩展或修改搜索顺序,所以你不会向上兼容未来的Windows版本。
还有一些重定向Windows加载程序的规则,例如。通过清单或注册表,如果你想要完全覆盖,你也必须复制它。