从库项目中的子文件夹引用 dll 文件

本文关键字:文件夹 引用 dll 文件 项目 | 更新日期: 2023-09-27 17:55:44

我正在编写一个包含其他库的C#库项目。此库应存储在子文件夹"lib"中。

假设我的项目叫做mylib,其他库叫做extralib。比目录看起来像这样:

 lib/extralib1.dll
 lib/extralib2.dll
 ...
 mylib.dll

我现在编写了一个 C#-Console-Application:我从 mylib.dll 调用一个函数,它调用来自 extralibs 的函数。当我使用这样的 app.config 文件时,一切正常:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
   ...
   <runtime>
       <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <probing privatePath="lib"/>
       </assemblyBinding>
   </runtime>
</configuration>

但问题是当我使用 mylib 时.dll例如在 MatLab 中。对额外库的引用不起作用。唯一的工作,当我将它们全部保存在同一个文件夹中时。这就是我不想做的。

所以关键是将 lib 添加到控制台应用程序中的私有路径不是一个好的解决方案!我必须将额外的库添加到 mylib.dll 中的私有路径中。

你知道怎么做吗?或者也许有更好的方法来解决这个问题?

从库项目中的子文件夹引用 dll 文件

如果需要,可以使用 IL Merge 将所有程序集合并到一个文件中。

-

-> IL 合并

我认为

,您将运行时探测与设计时引用混为一谈。可以在设计时设置对任何位置的引用。但在运行时,它可能需要位于不同的位置(例如 GAC 或同一箱)。此外,某些应用程序具有非常具体的方式来查找依赖项。您的探测可能无法在 MatLab 中工作的原因是,您没有用于控制台应用程序的配置文件。

是的,有更好的方法可以做到这一点。您需要创建可以接受的项目结构。生活免维护。想象您的解决方案树

____Solution
    |____MyLibProject
    |____MyConsoleProject
    |____Bin

现在,将项目设置为将生成输出放入解决方案箱。将您的"额外库"放在同一个地方。- 您的问题已解决。你有一个可爱的包,将永远工作。