【问题标题】:How do you tell which dll your c# application is using?你如何知道你的 c# 应用程序正在使用哪个 dll?
【发布时间】:2012-08-17 10:13:21
【问题描述】:

我有一个使用 .dll 的应用程序,该应用程序在位置 x 中充满了 gui 应用程序代码。以前有 1 个按钮,现在有 2 个。

当我启动我的应用程序时,我希望看到的是带有 2 个按钮的 gui,但是我看到的是带有 1 个按钮的 gui。我已经重建了我的 gui .dll,但它神奇地使用了某个地方的旧版本。如果我尝试调试我的代码,它会说我使用的代码版本与 .dll 中的不同

我的问题是,“我怎样才能知道它在哪里寻找 .dll 以及为什么要使用旧版本,因为我只有 1 个地方可以将 .dll 编译到?”

还想声明我引用了它,它是正确的版本,其中包含 2 个按钮。但是当我运行它时使用的是另一个版本???

【问题讨论】:

  • 如何引用 dll?是部署到bin目录还是使用COM或者放到GAC中?
  • 如何在项目中引用 DLL?您可以尝试右键单击引用,打开其属性并选中/取消选中 Copy Local 开关。此类问题通常通过完全重建所有内容并重新启动 Visual Studio 来解决。
  • 我稍微简化了这个问题。我的主程序加载了一个插件文件,该文件有一个 dll,其中引用了我所追求的 dll。它存储在构建目录中。让我感到困惑的是我已经删除了对旧版本的所有引用,但它一直在加载。我会试试这个模块窗口,看看它是否能说明所有加载的程序集及其位置。

标签: c# dll .net-assembly


【解决方案1】:

如果您使用 Visual Studio,请打开模块窗口,调试->Windows->模块 (Ctrl-D+M),这将列出所有已加载的程序集。

您还可以在运行时使用 AppDomain.CurrentDomain.GetAssemblies() 并遍历列表查看每个 Assembly.CodeBase。

如果一切都失败了,您还可以使用来自 sysinternals http://technet.microsoft.com/en-us/sysinternals/bb896645 的 ProcessMonitor 并查看您的进程加载了哪些 dll,但您将过滤掉大量输出。

【讨论】:

    【解决方案2】:

    如果您正在调试,您可以打开 Modules 窗口(Debug > Windows > Modules)。这将向您显示加载到您的进程中的所有可执行文件,包括名称和完整路径。然后,您应该能够确定从何处加载了过期的 DLL。

    【讨论】:

      【解决方案3】:

      您可以尝试在System.Reflection 命名空间中使用Reflection:

      var assembly = Assembly.Load("your-assembly-name");
      

      然后检查 assembly 对象的版本信息。

      【讨论】:

        猜你喜欢
        • 2013-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-10
        • 2010-12-08
        • 2010-09-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多