日期:2014-05-17  浏览次数:21322 次

C# dll文件引用(两天内结贴)
步骤说明:
第一步:项目一个类库MyDllAll,类库里添加一个类ExportHelper.cs文件,类里方法如 public class ExportHelper{...}导出功能
第二步:类ExportHelper.cs导出功能需要引用第三方dll文件,如NPOI.dll(问题就出在这个第三方dll)
第三步:生成类库,在\bin\Debug目录下面有两个dll文件MyDllAll.dll和NPOI.dll


问题来了:
公司另外一个项目,需要导出方法,想引用我的类库dll文件。
1.项目引用时,要引用“第三步”的几个dll文件才能满足,为什么?(40分)
2.有没有更好的方法,来封装处理类库的dll被引用的问题?
比如只引用一个MyDllAll.dll可以满足吗(60分)

看在100分的情况下,请认真回答哈!

------解决方案--------------------
楼主,我前几天在整理我的工具类的时候,我把第三方dll封装到我的dll中,拿到其它地方引用,我引用我自己封装的dll时没有再引用那个第三方dll,但是在bin目录能看到程序会将第三方dll输出,但是我在自己的项目中还真没有引用这个第三方dll
------解决方案--------------------
引用:
楼主,我前几天在整理我的工具类的时候,我把第三方dll封装到我的dll中,拿到其它地方引用,我引用我自己封装的dll时没有再引用那个第三方dll,但是在bin目录能看到程序会将第三方dll输出,但是我在自己的项目中还真没有引用这个第三方dll


+1 貌似用到套用dll时,都是把第三方dll直接copy到运行目录下就可以的,还真的没有直接引用第三方dll

------解决方案--------------------
当一个dll依赖另一个dll存在时,如果其他项目要引用其中的方法,那么必然要包含这些被依赖的dll

其实这样挺好,需要用到什么方法,那么添加所需的引用就可以了,如果需要什么其他的功能,那么可以基于此另外增加一些扩展方法,根据本身项目的需求

虽然网上有整合dll文件的工具,个人觉得没有太大的必要,缺什么引用什么,实在满足不了,可自行加入扩展
------解决方案--------------------
MyDllAll引用了NPOI.dll
所以要引用MyDllAll,也必须引用MyDllAll所依赖的NPOI.dll

------解决方案--------------------
不分开回答了,告诉你最关键的原理。

之所以要“引用”一个dll,本质上就是让编译器识别来自这个dll中的符号。
比如说,你新建一个dll,引用system.windows.forms,编写如下代码:
void showmessage(string s) { MessageBox.Show(s); }
那么你再新建一个控制台的C#项目。完全没有必要引用system.windows.forms

但是,如果你给这个dll添加如下方法
Form createform()
{
    return new System.Windows.Forms.Form();
}
并且调用的话,编译器需要知道Form这个类型,所以,你得在主程序中添加对system.windows.forms的引用。
------解决方案--------------------
引用的话要引用你的MyDllAll.dll就可以了,其他第三方的dll直接拷贝到目录下就可以了的,然后可以直接调用第3方的方法。