2010-01-03 31 views
4

我有一个解决方案,其中有3个项目。其中2个项目引用了log4net和其他几个DLL。如何将所有引用的DLL移动到C#中的独立文件夹?

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

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

我错过了什么!我花了几个小时的时间四处寻找弄清楚我做错了什么,也许这是我出生的方式!谢谢你的帮助!

回答

10

您可以使用<probing> element app.config文件中指定的融合(组装装载机)的私人路径进行搜索。

这允许您指定的应用程序目录的子路径的路径Fusion在尝试查找要绑定的组件时应搜索哪些内容。一个例子(从文档页面所)是:

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

这意味着,融合将在bin搜索,BIN2 \ subbin(但不BIN​​2,IIRC)和BIN3子目录组件时,试图与它们结合。

+0

伟大的工作,谢谢! – user53885 2010-01-03 21:44:55

3

我写了一个NuGet包,叫PrettyBin为了这个目的 它就将此一后生成目标的项目,即移动的dll到“LIB”子文件夹,并修改的app.config看看有

相关问题