【问题标题】:Missing DLLs from a class library that uses separate DLLs使用单独 DLL 的类库中缺少 DLL
【发布时间】:2014-11-20 00:19:46
【问题描述】:

在 C# .NET 4.0 中,我正在创建一个我计划在许多其他项目中重用的类库/DLL。这个类库本身将使用几个 DLL。例如,我正在创建的类库可能会引用几个 DLL,例如:

ServerConnectorLibrary references:
Lib1.dll
Lib2.dll
Lib3.dll

当我构建它时,我在 bin\Debug 文件夹中得到 ServerConnectorLibrary.dll 作为输出。

我现在想要的是在其他项目中使用这个ServerConnectorLibrary.dll。但是,当我将 DLL 添加到我的新项目并运行时,我收到以下错误:

FileNotFoundException: Could not load file or assembly "Lib1.dll".

如果我将Lib1.dll 添加到我的新项目的bin\Debug 文件夹中,问题并没有解决。

【问题讨论】:

  • 这很正常,如果 ServerConnectorLibrary.dll 引用 Lib1.Dll 则它依赖于它,因此如果您引用 ServerConnectorLibrary.dll,那么您还需要引用 Lib1.Dll 和所有其他依赖项。将依赖的DLL复制到Bin文件夹中不是个好主意,请正确引用。
  • 感谢您的建议。在 Visual Studio 中,我对 DLL 的引用是绝对文件路径。当我将我的应用程序发送到另一台计算机时,那台计算机显然没有 DLL。究竟如何引用它以便我可以部署应用程序和 DLL?
  • 只要所有引用的 DLL 都将 CopyLocal 设置为 true(通常是默认值),那么当您编译应用程序时,它们就会被复制到 Bin 目录。它们在任何给定机器上的位置与部署应用程序并不真正相关,但它们是项目文件中的相对路径,它们只是在属性窗口中显示为绝对路径。
  • 使用 Fuslogvw.exe 解决程序集解析问题。

标签: c# .net dll


【解决方案1】:

您可以将所有依赖项组合到一个程序集中。这是 CodeProject 上的一个旧示例。

http://www.codeproject.com/Articles/9364/Merging-NET-assemblies-using-ILMerge

这里还有一个 StackOverflow 线程...

How do I merge multiple .net assemblies into a single assembly?

否则,请确保将每个依赖项的属性设置为复制本地,然后将依赖项与您的库一起包含。这些是 DLL,因此它们在运行时是动态链接的,不像旧的 C++ 和 C 库可能是静态链接的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 2013-06-21
    • 2011-04-15
    • 2020-09-01
    • 2014-08-31
    • 2010-09-18
    相关资源
    最近更新 更多