【问题标题】:Resolve libraries path used by .NET application解析 .NET 应用程序使用的库路径
【发布时间】:2011-11-19 19:30:08
【问题描述】:

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

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


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

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

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

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

这在任何情况下都有可能吗?这不是猜错的选择。

【问题讨论】:

  • 哦,一切都应该在 .NET4 客户端配置文件下完成。
  • 有什么理由不使用反射器或类似工具来分解它们的内容?
  • @Yahia - 这确实给了我"kernel32.dll""{mscorlib, Version=4.0.0.0, [...]}" 之类的东西,我需要该库的完整路径。 (这些只是可以硬编码的示例......)
  • 您的意思是像CheckAsm 或其他各种工具?
  • @Ritch Melton - 在这个方向上,也是为了解析本机 dll,它真的不应该执行任何其他代码,当然在这里以编程方式 ;-)

标签: c# .net dll assemblies assembly-resolution


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多