【问题标题】:Use one dll by multiple Applications?多个应用程序使用一个dll?
【发布时间】:2020-01-14 17:07:23
【问题描述】:

我在 Visual Studio 2017 中有一个解决方案,其中大约 10 个项目打算使用相同的 dll。 为我引用 dll 的最简单方法似乎是将其添加到 10 个项目中的每一个的“参考”中。 示例是位于不同文件夹中的 .exe 文件。他们都应该在一个名为 ../DLL 的文件夹中访问同一个 dll。 不幸的是,.exe 文件仅在 dll 位于同一目录中的情况下运行。 我发现了很多关于该主题的主题,但似乎没有简单的出路,比如改变一种路径属性或将搜索范围扩展到环境路径或类似的东西......

【问题讨论】:

  • 库不应该在同一个文件夹中是否有原因?这是默认设置。你可以改变它,但它可能比你愿意投资的要多。
  • exe 文件位于不同的文件夹中,因此每个文件夹都需要一份 dll 副本。我只想使用一个 dll 文件。我也很乐意访问例如 c:\Windows\System32\. 中的 dll
  • 将包含 dll 的文件夹添加到系统 PATH 环境变量中。但是,您应该在每台将使用您的解决方案的计算机上执行此操作
  • 你问的是gac吗?没试过,但是it seems easy.
  • 感谢您的评论,奥莱斯卡。我尝试将我的 dll 添加到 c:\Windows\System32 等已知路径,并添加了一个包含 dll 的自己的路径。两者都不起作用。

标签: c# dll path reference


【解决方案1】:

据我所知,您需要告诉每个项目要引用什么 .dll 以及在哪里找到它。所以不,我认为除了将其添加到参考文献之外别无他法。话又说回来,添加 10 篇参考文献会花费你 3 分钟吗?

【讨论】:

    【解决方案2】:

    我想提出两个解决方案 首先是可以把引用的dll放到lib\dllreferenced文件夹下,提交到存放所有项目的源码管理中。 然后,您可以从存储库中的任何项目引用此 dll,该 dll 将被复制到每个项目的bin\Debugbin\Release

    要在解决方案中使用新的 dll 版本,只需将新的 dll 版本放在 lib\dllreferenced 文件夹中,所有项目都会获得这个更新的 dll。

    但是,将 dll 存储在源代码管理中并不是最好的方法,因此您可以尝试另一种: 创建包含 dll 的 nuget package。然后,您可以使用标准 NuGet 包版本控制轻松管理包版本。您可以在任何解决方案中将此包引用到任何项目,它会在构建过程中由 VS 自动解析。

    要将包交付给编译源代码的计算机,您需要使用特定的存储库来存储 nuget 包。它可以是 nuget 服务器(如 http://nuget.org)或组织中的共享文件夹。 Here is how you can create nuget for unmanaged dlls.

    【讨论】:

    • 非常感谢,奥莱斯卡。我想在一个位置使用一个 dll。有没有办法将 dll 复制到 maye c:\Windows\System32 并告诉 app1、app2 和 app3 通过将其添加到他们的“参考”和“使用”来使用这个 dll?也许没有办法,所以我们应该在这里停下来。我会尝试一些分享方法,比如 nuget 或 gac ...
    • @tom2051 您如何在项目中使用unmanaged dll 以及如何创建对这些dll 的引用?我使用了很多 [DllImport("advapi32.dll")] 属性,并且在与我的应用程序二进制文件相同的文件夹中没有 advapi32.dll 并且它可以工作。请阅读.net 可以在assembly subfolders 中加载managed 程序集,但这与unmanaged dll 无关。
    猜你喜欢
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多