2012-08-17 96 views
1

我有一个应用程序,它使用位于x中的充满gui应用程序代码的.dll文件。它使用有1个按钮,但现在有2个。你怎么知道你的C#应用​​程序正在使用哪个DLL?

当我开始我的应用程序时,我期望看到的是一个带有2个按钮的GUI,但是我看到一个带有1个按钮的GUI。我已经重建了我的gui.dll,但它奇迹般地使用了某个地方的旧版本。如果我尝试和调试我的代码,它说我使用的代码版本不同于.dll中的代码

我的问题是,“我如何知道它在哪里查找.dll以及为什么它会使用旧版本,因为我只有一个地方,我编译的.dll?“

也想表明,我有它的引用,它是有2个按钮的正确版本..但是当我运行它使用另一个版本?

+0

你如何参考DLL?您是否已将其部署到bin目录或使用COM或将其放入GAC? – Liam 2012-08-17 10:16:20

+0

你如何在你的项目中引用DLL?您可以尝试右键单击该引用,打开其属性并选中/取消选中复制本地开关。这些问题通常是通过完全重建所有东西并重新启动Visual Studio来解决的。 – 2012-08-17 10:18:51

+0

我简化了这个问题。我的主程序加载一个插件文件,其中有一个dll,其中引用了我后面的dll。它存储在构建目录中。让我困惑的是我删除了所有旧的引用,但它一直在加载。我会尝试使用这个模块窗口,看看是否对所有加载的程序集及其位置有所了解。 – pengibot 2012-08-17 13:19:05

回答

3

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

您也可以在运行时使用AppDomain.CurrentDomain.GetAssemblies()并遍历每个Assembly.CodeBase。

如果一切都失败了,你也可以使用Sysinternals http://technet.microsoft.com/en-us/sysinternals/bb896645中的ProcessMonitor并观察你的进程加载了哪些dll,但是你会过滤出大量的输出。

0

你可以尝试在System.Reflection命名空间使用Reflection

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

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

1

如果你正在调试你可以打开模块窗口(调试>的Windows>模块)。这将向您显示加载到您的进程中的所有可执行文件,包括名称和完整路径。然后,您应该能够找出加载过期DLL的位置。

相关问题