【问题标题】:How can I get a list of files loaded by my process?如何获取进程加载的文件列表?
【发布时间】:2009-12-29 19:55:47
【问题描述】:

我正在尝试对项目进行快速而肮脏的部署。我认为运行我的进程会很容易,使用一些工具来获取所有已加载文件 (DLL) 的列表,并使用该列表为我的测试部署创建一个副本文件列表。

考虑过使用 filemon,但那里有很多噪音。它是一个.net 项目。

谢谢。

【问题讨论】:

  • @GrayWizardx 那么你为什么不投票关闭它呢?这就是它应该如何工作的方式。
  • 我同意这个问题与我的问题相同,尽管我想在不将该逻辑编码到我的项目中的情况下弄清楚它。我还没有看到这样做的好方法
  • 在你的项目中编码有什么问题?
  • 看起来他们需要的东西与 TheSean 希望它部署应用程序的东西并不完全相同。

标签: .net deployment sysinternals


【解决方案1】:

进程浏览器?

【讨论】:

【解决方案2】:

您应该能够使用 .NET 的反射来分析您的应用程序 AppDomain(s) 并转储已加载程序集和位置的列表。

var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (var assembly in loadedAssemblies)
{
    Console.WriteLine(assembly.GetName().Name);
    Console.WriteLine(assembly.Location);
}

【讨论】:

  • 我认为这是最好的答案,虽然不是我所希望的。我不想在我的项目中添加代码来实现这一点。但看起来它会起作用。
  • 请注意,GetAssemblies() 不会始终如一地工作,因为它不是递归的,它会遗漏任何嵌套的程序集引用。我在stackoverflow.com/questions/383686/… 处添加了GetAssemblies() 的递归版本。
【解决方案3】:

查看AppDomain.GetAssemblies

For Each Ass As Reflection.Assembly In CurrentDomain.GetAssemblies()
    Console.WriteLine(Ass.ToString())
Next

【讨论】:

    【解决方案4】:

    已经在另一个question 中回答了这个问题。

    它的要点是使用当前 appdomain 来获取程序集列表并遍历它们的加载器位置。

    【讨论】:

      【解决方案5】:

      如果我理解了您的问题,要进行快速部署,您可以在项目的所有引用中进行设置,但框架将“复制本地”设置为 true。

      这样,当您构建应用程序时,您的输出目录中将拥有所有需要的 DLL(嗯,几乎所有引用所需的引用都不会自动复制,因此最好也将它们添加为本地引用)。

      希望这会有所帮助。如果没有,请说出原因,我会继续努力。

      【讨论】:

      • 谢谢,希望就这么简单。我们的应用程序的设计方式是我们在运行时加载了很多引用。这就是让弄清楚如此痛苦的原因。我们基本上有一个 bin 文件夹,其中包含数百个 DLL。我的项目只需要一个子集。我可以复制所有的,但它的 MB 比我需要的多。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-09
      • 2012-10-23
      • 2016-07-25
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 2019-03-23
      相关资源
      最近更新 更多