6

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

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

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

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

4

2 回答 2

13

您可以使用 app.config 文件中的<probing>元素为 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 子目录中搜索程序集。

于 2010-01-03T21:22:58.680 回答
4

为此,我编写了一个名为PrettyBin的 nuget 包,它向项目添加了一个后期构建目标,将 dll 移动到“lib”子文件夹,并修改 app.config 以查看那里

于 2014-12-16T12:06:42.377 回答