C# dll放子文件夹问题

时间:2022-09-03 19:37:17
C#开发exe项目,会引用一些比如MySql.Data.dll,NPOI.dll等dll库,现在生成项目会将所有的dll都生成在debug根目录下,和exe在同一个文件夹,这样的话就会太乱了,我在debug的下创建了目录lib,将dll全放在lib目录下,运行时就会提示找不到xx.dll,这个要怎么解决?

15 个解决方案

#1


你在项目中添加一个文件夹, 将dll文件拷贝到里面。然在文件夹上点右键——添加现有项 将dll文件添加到项目里面,每个dll文件都将“生成操作”选择为“内容”,复制到输出目录选为“如果较新则复制”或者“一直复制”。试试看。

#2


引用 1 楼 Libby1984 的回复:
你在项目中添加一个文件夹, 将dll文件拷贝到里面。然在文件夹上点右键——添加现有项 将dll文件添加到项目里面,每个dll文件都将“生成操作”选择为“内容”,复制到输出目录选为“如果较新则复制”或者“一直复制”。试试看。


不行,还是会提示找不到XXX.DLL,不可能直接引用的DLL只能放在根目录吧

#3


首先你说的乱,你有见到哪个程序不是在一起的吗?
提示找不到XXX.DLL,是什么时候提示?编译还是运行?

#4



在配置文件中,添加一个AssemblyBinding元素,可多个路径,用英文分号分隔。


<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <publisherPolicy apply="yes"/>
      <probing privatePath="Common;Security"/>
    </assemblyBinding>
  </runtime>
</configuration>

#5


引用 3 楼 Hello_Ge 的回复:
首先你说的乱,你有见到哪个程序不是在一起的吗?
提示找不到XXX.DLL,是什么时候提示?编译还是运行?


运行时呀,引用是直接在解决方案中引用的,编译时肯定能找到,运行就找不到了

#6


引用 4 楼 huangwenjia 的回复:
在配置文件中,添加一个AssemblyBinding元素,可多个路径,用英文分号分隔。


<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <publisherPolicy apply="yes"/>
      <probing privatePath="Common;Security"/>
    </assemblyBinding>
  </runtime>
</configuration>


这个是WEB项目才有这个配置吧

#7


引用 5 楼 hljt512 的回复:
Quote: 引用 3 楼 Hello_Ge 的回复:

首先你说的乱,你有见到哪个程序不是在一起的吗?
提示找不到XXX.DLL,是什么时候提示?编译还是运行?


运行时呀,引用是直接在解决方案中引用的,编译时肯定能找到,运行就找不到了


那你要看看路径对不对了,是不要还是在debug目录下找xx.DLL

#8


一般做法都是一个bin目录,所有exe、dll都放在里面
然后在外面放个代理的exe来调用bin中的主程序

#9


引用 7 楼 Hello_Ge 的回复:
Quote: 引用 5 楼 hljt512 的回复:

Quote: 引用 3 楼 Hello_Ge 的回复:

首先你说的乱,你有见到哪个程序不是在一起的吗?
提示找不到XXX.DLL,是什么时候提示?编译还是运行?


运行时呀,引用是直接在解决方案中引用的,编译时肯定能找到,运行就找不到了


那你要看看路径对不对了,是不要还是在debug目录下找xx.DLL


java有个lib文件夹可以放所有的外部公共Lib库,C#难道只能放在根目录?要不然就只能通过反射才能找到其它目录的DLL吗?

#10


引用 6 楼 hljt512 的回复:
Quote: 引用 4 楼 huangwenjia 的回复:


在配置文件中,添加一个AssemblyBinding元素,可多个路径,用英文分号分隔。


<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <publisherPolicy apply="yes"/>
      <probing privatePath="Common;Security"/>
    </assemblyBinding>
  </runtime>
</configuration>


这个是WEB项目才有这个配置吧
谁告诉你的?

#11


引用 9 楼 hljt512 的回复:
Quote: 引用 7 楼 Hello_Ge 的回复:

Quote: 引用 5 楼 hljt512 的回复:

Quote: 引用 3 楼 Hello_Ge 的回复:

首先你说的乱,你有见到哪个程序不是在一起的吗?
提示找不到XXX.DLL,是什么时候提示?编译还是运行?


运行时呀,引用是直接在解决方案中引用的,编译时肯定能找到,运行就找不到了


那你要看看路径对不对了,是不要还是在debug目录下找xx.DLL


java有个lib文件夹可以放所有的外部公共Lib库,C#难道只能放在根目录?要不然就只能通过反射才能找到其它目录的DLL吗?


其实DLL放哪里都行,你只要引用的时候指定相应的位置就行

#12


4楼方法是对的
配置文件名是app.config
如果是web项目 则是web.config

#13


有什么乱的,别去看就行了,要桌面生成快捷方式就可以了.

#14


统一放在debug文件夹下来来引用。

#15


不用你专门放到某个文件夹,只需要引用进来就行

#1


你在项目中添加一个文件夹, 将dll文件拷贝到里面。然在文件夹上点右键——添加现有项 将dll文件添加到项目里面,每个dll文件都将“生成操作”选择为“内容”,复制到输出目录选为“如果较新则复制”或者“一直复制”。试试看。

#2


引用 1 楼 Libby1984 的回复:
你在项目中添加一个文件夹, 将dll文件拷贝到里面。然在文件夹上点右键——添加现有项 将dll文件添加到项目里面,每个dll文件都将“生成操作”选择为“内容”,复制到输出目录选为“如果较新则复制”或者“一直复制”。试试看。


不行,还是会提示找不到XXX.DLL,不可能直接引用的DLL只能放在根目录吧

#3


首先你说的乱,你有见到哪个程序不是在一起的吗?
提示找不到XXX.DLL,是什么时候提示?编译还是运行?

#4



在配置文件中,添加一个AssemblyBinding元素,可多个路径,用英文分号分隔。


<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <publisherPolicy apply="yes"/>
      <probing privatePath="Common;Security"/>
    </assemblyBinding>
  </runtime>
</configuration>

#5


引用 3 楼 Hello_Ge 的回复:
首先你说的乱,你有见到哪个程序不是在一起的吗?
提示找不到XXX.DLL,是什么时候提示?编译还是运行?


运行时呀,引用是直接在解决方案中引用的,编译时肯定能找到,运行就找不到了

#6


引用 4 楼 huangwenjia 的回复:
在配置文件中,添加一个AssemblyBinding元素,可多个路径,用英文分号分隔。


<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <publisherPolicy apply="yes"/>
      <probing privatePath="Common;Security"/>
    </assemblyBinding>
  </runtime>
</configuration>


这个是WEB项目才有这个配置吧

#7


引用 5 楼 hljt512 的回复:
Quote: 引用 3 楼 Hello_Ge 的回复:

首先你说的乱,你有见到哪个程序不是在一起的吗?
提示找不到XXX.DLL,是什么时候提示?编译还是运行?


运行时呀,引用是直接在解决方案中引用的,编译时肯定能找到,运行就找不到了


那你要看看路径对不对了,是不要还是在debug目录下找xx.DLL

#8


一般做法都是一个bin目录,所有exe、dll都放在里面
然后在外面放个代理的exe来调用bin中的主程序

#9


引用 7 楼 Hello_Ge 的回复:
Quote: 引用 5 楼 hljt512 的回复:

Quote: 引用 3 楼 Hello_Ge 的回复:

首先你说的乱,你有见到哪个程序不是在一起的吗?
提示找不到XXX.DLL,是什么时候提示?编译还是运行?


运行时呀,引用是直接在解决方案中引用的,编译时肯定能找到,运行就找不到了


那你要看看路径对不对了,是不要还是在debug目录下找xx.DLL


java有个lib文件夹可以放所有的外部公共Lib库,C#难道只能放在根目录?要不然就只能通过反射才能找到其它目录的DLL吗?

#10


引用 6 楼 hljt512 的回复:
Quote: 引用 4 楼 huangwenjia 的回复:


在配置文件中,添加一个AssemblyBinding元素,可多个路径,用英文分号分隔。


<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <publisherPolicy apply="yes"/>
      <probing privatePath="Common;Security"/>
    </assemblyBinding>
  </runtime>
</configuration>


这个是WEB项目才有这个配置吧
谁告诉你的?

#11


引用 9 楼 hljt512 的回复:
Quote: 引用 7 楼 Hello_Ge 的回复:

Quote: 引用 5 楼 hljt512 的回复:

Quote: 引用 3 楼 Hello_Ge 的回复:

首先你说的乱,你有见到哪个程序不是在一起的吗?
提示找不到XXX.DLL,是什么时候提示?编译还是运行?


运行时呀,引用是直接在解决方案中引用的,编译时肯定能找到,运行就找不到了


那你要看看路径对不对了,是不要还是在debug目录下找xx.DLL


java有个lib文件夹可以放所有的外部公共Lib库,C#难道只能放在根目录?要不然就只能通过反射才能找到其它目录的DLL吗?


其实DLL放哪里都行,你只要引用的时候指定相应的位置就行

#12


4楼方法是对的
配置文件名是app.config
如果是web项目 则是web.config

#13


有什么乱的,别去看就行了,要桌面生成快捷方式就可以了.

#14


统一放在debug文件夹下来来引用。

#15


不用你专门放到某个文件夹,只需要引用进来就行