【问题标题】:How to move all referenced DLLs into seperate folder in c#?如何将所有引用的 DLL 移动到 c# 中的单独文件夹中?
【发布时间】:2020-09-03 21:38:37
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# setup-project


    【解决方案1】:

    您可以使用 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 子目录中搜索程序集。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-14
        • 1970-01-01
        • 2015-06-24
        • 1970-01-01
        • 2012-10-13
        • 2018-12-15
        • 1970-01-01
        • 2012-08-01
        相关资源
        最近更新 更多