从库项目中的子文件夹引用 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 中的私有路径中。
你知道怎么做吗?或者也许有更好的方法来解决这个问题?
如果需要,可以使用 IL Merge 将所有程序集合并到一个文件中。
--> IL 合并
我认为
,您将运行时探测与设计时引用混为一谈。可以在设计时设置对任何位置的引用。但在运行时,它可能需要位于不同的位置(例如 GAC 或同一箱)。此外,某些应用程序具有非常具体的方式来查找依赖项。您的探测可能无法在 MatLab 中工作的原因是,您没有用于控制台应用程序的配置文件。
是的,有更好的方法可以做到这一点。您需要创建可以接受的项目结构。生活免维护。想象您的解决方案树
____Solution
|____MyLibProject
|____MyConsoleProject
|____Bin
现在,将项目设置为将生成输出放入解决方案箱。将您的"额外库"放在同一个地方。- 您的问题已解决。你有一个可爱的包,将永远工作。