解决.NET应用程序使用的库路径问题

3
我想查找给定.NET应用程序中使用的库的完整路径。这些库包括引用程序集(作为AssemblyName获取)和P/Invoke/DllImport函数(仅获取dll名称)。因此,我基本上正在搜索这两种方法的内容,其中executablePath是第三方.NET应用程序的路径,可能与我的程序完全不同。
static string ResolveAssemblyPath(AssemblyName name, string executablePath)
{
    // ...
}

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

这些已找到的库在确定其完整路径的过程中不执行任何代码非常重要!DllMain模块初始化程序等)

在每种情况下都可能实现吗?猜错不是选项。


哦,而且所有的工作都应该在_.NET4_客户端配置文件下完成。 - ordag
你的意思是像 CheckAsm 或其他各种工具吗? - Ritch Melton
@ Ritch Melton - 这个方向是对的,但也适用于本地dll的解析,并且它不应该执行任何其他代码,当然在程序上实现这一点;-) - ordag
@ordag 我的意思是,只需将相应的方法反汇编以查看它们的实现方式... - Yahia
也许你想要查看Hans在stackoverflow上的这个答案:https://dev59.com/unE95IYBdhLWcg3wMrEB - Surjit Samra
显示剩余2条评论
1个回答

1

这是可能的,但您需要复制Windows加载程序的搜索顺序,该顺序因本机和托管模块以及甚至Windows版本而异。我在各种博客中看到过不同程度的详细信息,尽管我手头没有其中任何一个。它似乎也在 MSDN中有记录,所以请查看一下是否适用于您。

无论如何,如果猜错不是选项,您将面临问题,因为任何未来的Windows版本都可以扩展或修改搜索顺序,因此您将无法向上兼容未来的Windows版本。

另外,还有重定向Windows加载程序的规则,例如通过清单或注册表,如果您想要确切的覆盖范围,您还必须复制它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接