【问题标题】:Pointing an exe to a dll outside of the executable's directory将 exe 指向可执行文件目录之外的 dll
【发布时间】:2014-01-08 03:29:17
【问题描述】:

使用C#,VS2012,windows server 2012r2

我对此进行了一些搜索,我想我已经知道答案了,但希望有人能告诉我我是否正确。

我有一个网站,它的 bin 文件夹中有一个 dll。我还有几个按需或按计划运行的可执行工具,几乎所有工具都使用与 wesbite 相同的 dll。或者更确切地说,他们使用驻留在每个 exe 文件夹中的该 dll 的副本。

这很麻烦,因为每当我为网站更新该 dll 时,所有这些 exe 现在都在使用旧版本的 dll。因此,如果我可以将所有 exe 文件指向网站 bin 文件夹并使用其中的 dll,我会很高兴。

如果可能的话,我宁愿不修改 Windows PATH 值。如果是这样,它看起来需要使用一个名为 LoadLibrary 的函数?我几乎不做任何 Windows 编程,所以我对此一点也不熟悉。这是唯一(或最好)的方法吗?

我找到了这篇博文:http://blogs.msdn.com/b/jonathanswift/archive/2006/10/03/dynamically-calling-an-unmanaged-dll-from-.net-_2800_c_23002900_.aspx

我是否只是创建 NativeMethods 类,然后为我需要调用的每个方法/函数调用 GetProcAddress?

我希望有一种方法可以基本上告诉 exe 使用 app.config 在特定文件夹中查找 dll。这不可能吗?

谢谢

【问题讨论】:

  • 您的 DLL 是托管还是非托管 DLL?
  • 您可以尝试将 DLL 放在某个地方,然后在每个应用程序 bin 目录中创建指向它的符号链接(需要 Vista 或更高版本)。更新应该只需要替换单个链接目标。我认为这应该可行,但我对 Windows 上的符号链接没有太多经验,而且 Windows 似乎也没有为它们提供很好的工具/管理支持。
  • 托管 - 全部在 .net/C# 中完成

标签: c# .net windows dll


【解决方案1】:

看起来你的 DLL 是一个托管 DLL(建立在 .net 上),因为你说你几乎不做任何 Win32 API 编程。

一种解决方案是在GAC 中安装您的DLL。然后,每次更新 DLL 程序集版本并部署到 GAC 时,都必须重定向应用程序以使用最新版本。 See this.

【讨论】:

  • 是的 - 这一切都在 .net/C# 中完成。我想我会尝试按照 Michael Burr 在评论中建议的那样进行符号链接,因为这看起来更简单一些,也意味着我可以使用常规文件副本更新 dll。如果这不起作用,那么我将尝试部署到 GAC。谢谢
猜你喜欢
  • 1970-01-01
  • 2011-08-12
  • 2013-06-16
  • 2013-11-29
  • 2019-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多