如何将所有引用的DLL移动到c#中的单独文件夹中?

时间:2010-01-03 21:19:36

标签: c# setup-project

我有一个包含3个项目的解决方案。其中2个项目引用了log4net和其他几个DLL。

当我创建安装包并为每个项目添加项目输出时 - 它将DLL放入主“应用程序文件夹”中。如果我将这些DLL拖到我在安装项目中创建的单独文件夹中,应用程序将无法运行“无法找到log4net”。我希望这些DLL引用真的像“bin”或任何名称,只是不是主文件夹,他们添加混乱 - 我只是想在我的主文件夹中的2.exe。

我尝试在每个项目中添加一个引用路径以指向“bin”文件夹。然后在安装项目中,我添加了一个名为“bin”的输出文件夹,并将DLL移动到该文件夹​​中,仍然无效。

我错过了什么!我花了几个小时环顾四周试图弄清楚我做错了什么,也许这就是我出生的方式!谢谢你的帮助!

2 个答案:

答案 0 :(得分:10)

您可以使用app.config文件中的<probing> element指定要搜索的Fusion(程序集加载程序)的专用路径。

这允许您指定路径,这些路径是Fusion在尝试查找要绑定的程序集时应搜索的应用程序目录的子路径。一个例子(取自文档页面)是:

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin;bin2\subbin;bin3"/>
      </assemblyBinding>
   </runtime>
</configuration>

这意味着当尝试绑定到程序集时,Fusion将在bin,bin2 \ subbin(但不是bin2,IIRC)和bin3子目录中搜索程序集。

答案 1 :(得分:3)

为此,我写了一个名为PrettyBin的nuget包 它将后期构建目标添加到项目中,将dll移动到&#34; lib&#34;子文件夹,并修改app.config以查看