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

C# 从库项目中的子文件夹引用dll文件,c#,.net,visual-studio,visual-studio-2012,dll,C#,.net,Visual Studio,Visual Studio 2012,Dll,我正在写一个C#Library项目,其中包括其他库。此库应存储在子文件夹“lib”中 假设我的项目名为mylib,其他库名为extralib。然后,目录如下所示: lib/extralib1.dll lib/extralib2.dll ... mylib.dll <?xml version="1.0" encoding="utf-8"?> <configuration> ... <runtime> <assemblyB

我正在写一个C#Library项目,其中包括其他库。此库应存储在子文件夹“lib”中

假设我的项目名为mylib,其他库名为extralib。然后,目录如下所示:

 lib/extralib1.dll
 lib/extralib2.dll
 ...
 mylib.dll
<?xml version="1.0" encoding="utf-8"?>
<configuration>
   ...
   <runtime>
       <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <probing privatePath="lib"/>
       </assemblyBinding>
   </runtime>
</configuration>
我现在编写了一个C#控制台应用程序: 我从mylib.dll调用函数,mylib.dll调用extralibs中的函数。当我使用如下app.config文件时,一切正常:

 lib/extralib1.dll
 lib/extralib2.dll
 ...
 mylib.dll
<?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内的私有路径中


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

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


-->

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


-->

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

是的,有更好的方法。您需要创建可以接受的项目结构。现场免维护。想象一下你的解决方案树

____Solution
    |____MyLibProject
    |____MyConsoleProject
    |____Bin

现在,将您的项目设置为将构建输出放入解决方案箱。把你的“extralib”放在同一个地方你的问题解决了。你有一个可爱的包,将永远工作

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

是的,有更好的方法。您需要创建可以接受的项目结构。现场免维护。想象一下你的解决方案树

____Solution
    |____MyLibProject
    |____MyConsoleProject
    |____Bin

现在,将您的项目设置为将构建输出放入解决方案箱。把你的“extralib”放在同一个地方你的问题解决了。你有一个可爱的包,将永远工作

我找到了这个函数:
AppDomain.CurrentDomain.SetupInformation.PrivateBinPath=“lib”
但是我不想知道在mylib.dll中首先调用哪个函数,我也不想在每个函数中都添加这个。如果您的配置文件没有被使用,CLR会尝试查找matlab.exe.config。为一个可能使用许多其他插件的程序编写一个配置文件,而这些插件也需要修改该配置文件是。。。不明智。没有人关心这些DLL是否在同一个目录中,只有你。我找到了这个函数:
AppDomain.CurrentDomain.SetupInformation.PrivateBinPath=“lib”
但是我不想知道在mylib.dll中首先调用哪个函数,我也不想在每个函数中都添加这个。如果您的配置文件没有被使用,CLR会尝试查找matlab.exe.config。为一个可能使用许多其他插件的程序编写一个配置文件,而这些插件也需要修改该配置文件是。。。不明智。没有人关心这些DLL是否在同一个目录中,只有你。我找到了这个函数:
AppDomain.CurrentDomain.SetupInformation.PrivateBinPath=“lib”
但是我不想知道在mylib.dll中首先调用哪个函数,我也不想在每个函数中都添加这个。如果您的配置文件没有被使用,CLR会尝试查找matlab.exe.config。为一个可能使用许多其他插件的程序编写一个配置文件,而这些插件也需要修改该配置文件是。。。不明智。没有人关心这些DLL是否在一个目录中,只有您。谢谢您的回复。该项目并不像问题中显示的那么简单,我不想为了您的回答而合并DLLStanks。该项目并不像问题中显示的那么简单,我不想为了您的回答而合并DLLStanks。这个项目不像问题中显示的那么简单,我不想合并DLL