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

时间:2015-06-11 12:58:49

标签: c# .net visual-studio visual-studio-2012 dll

我正在编写一个包含其他库的C#Library-Project。这些库应存储在子文件夹" 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>

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

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

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

2 个答案:

答案 0 :(得分:0)

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

- &GT; IL Merge

答案 1 :(得分:0)

我认为,您将运行时探测与设计时引用混合在一起。您可以在设计时设置对任何位置的引用。但是在运行时,它可能需要位于不同的位置(例如,GAC或相同的bin)。此外,一些应用程序具有非常特定的查找依赖关系的方法。你的探测可能在MatLab中不起作用的原因是因为你没有用你的控制台应用程序使用的配置文件。

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

____Solution
    |____MyLibProject
    |____MyConsoleProject
    |____Bin

现在,设置项目以将构建输出放入Solution-Bin。将你的“extralib”放在同一个地方。 - 你的问题解决了。你有一个可爱的包,永远有效。