C#中引用dll的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中引用dll的问题相关的知识,希望对你有一定的参考价值。

C#中引用dll,一般直接添加引用,dll就在exe的目录下,看着有点乱,想将引用的dll归类到各个文件夹下引用,网上说dllimport可以,但是引用路径不能用System.Environment.CurrentDirectory+"\\lib\\XXX.dll";这样就报错。
还有一个问题,winform的窗体封装到DLL中用dllimport调用怎么显示dll的窗体,求详细的方法!
或者怎样,让引用的dll可以放在其他的文件夹下。

参考技术A

需要明确的是你现在讨论的dll是用什么语言写的,或者说是不是.net平台下写的。

    如果是,则不需要dllimport,放debug文件夹下并直接引用是比较好的,而且用不着类似你上面用代码来指定路径。

    如果不是,则需要dllimport。

追问

C#写的dll,但是都放在debug下,似乎乱了点虽然不是很多,有没有方法放在其他文件夹下??

追答

你可以建立一个文件夹,然后放进去,再引用啊。当然你部署的时候也要一样把此文件夹放在debug旁边才行。

参考技术B 1.分类是可以的,直接增加个应用程序配置文件,在assemblyBinding下增加节点
<probing privatePath="Drivers" />,如下例
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="Drivers" />
</assemblyBinding>
</runtime>
2.我的理解:你是想做动态加载dll?这是一种很Open的开发,类似于工厂模式,需要约定,利用的核心类还是Assembly ,这个需要提前想好架构
参考技术C 1. 请把dll放到项目文件夹下...这是最靠谱的办法...
2. 考虑PE文件dll有x86和x64两种制式 .net程序编译时也要指定cpu 用any cpu会有不可预料的风险
3. 如果程序编译使用x86 对于64位系统 你需要把dll放到x:\windows\syswow64里 因为system32存放的是64位的应用程序和库
希望对你能有所帮助。
参考技术D 调用窗体直接new,然后Show

C#中dll放到子目录的引用问题



在一个C#的项目里添加引用了好多个dll程序(默认自动复制到本地那种),并通过using namespace...调用的。现在在主程序里需要调用好多个外部的dll,变了生产项目后,exe同一目录太多dll了。现在想按照一定的规则给这些dll分别保存在exe下的不同一个目录,如suport_dll , manager_dll目录下,该如何做呢?     

方法1:

解答:   在应用程序运行的时候,会检查当前程序运行的目录有无所需要的dll文件,如果找不到,就会查找APP.Config配置文件中所配置的目录 

<?xml version="1.0" encoding="utf-8" ?> 

<configuration> 

<runtime> 

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="bin;bin\B"/> 

</assemblyBinding> 

</runtime> 

</configuration>

网址:http://www.360doc.com/content/15/1106/16/14578864_511226718.shtml


按照此讲解,我的App.config修改如下:

配置如下,多个目录用;分隔

<?xml version="1.0" encoding="utf-8" ?><configuration> <startup>  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> </startup> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="bin;dll"/> </assemblyBinding> </runtime></configuration>

我的dll文件放在dll文件夹下

然后将dll文件夹包括到项目中,将文件的复制到输出目录属性设置为始终复制,将引用中所需的dll的复制到本地属性设置为false

还有其它的方法可以参考:https://blog.csdn.net/u012842630/article/details/90744245

方法2:

下面假设 Project 名为 Gamma4RTD,需要调用的 dll 文件为 rtddll.dll。IDE 是 Visual Studio 2015


打开 Visual Studio 2015 -> Project -> Gamma4RTD Properties...。然后在 Post-build event command line: 下面填写如下这条命令即可:

Copy  "$(ProjectDir)rtddll.dll"  "$(ProjectDir)$(OutDir)"

https://blog.csdn.net/heray1990/article/details/72270671

以上是关于C#中引用dll的问题的主要内容,如果未能解决你的问题,请参考以下文章

C#中dll放到子目录的引用问题

█c# 为啥有的dll不能直接引用,必须regsvr32 注册后 才能引用?

在VS2013中引用dll(C#)

为啥 C# 需要注册 COM DLL 才能引用它?

c#编程添加引用dll文件后怎样调用

vs2010 C# 添加 DLL引用