以下所有文字内容是我的一点经验,欢迎大家补充修正。C#中引用DLL非常普遍,第一种情况是在程序代码中使用DllImport导入API。本贴讨论第二种情况:通过添加引用来使用DLL。被引用的DLL必需是基于.net的DLL。比如用于压缩算法的ICSharpCode.SharpZipLib.dll,其提供商分别就不同语言环境提供相应下载。我机器上装的是.net2 ,所以就选用.net2版本的ICSharpCode.SharpZipLib.dll。有一点非常重要:就是引用的DLL布署到客户机器上后,可能需要注册,否则不能正常工作。比如小弟一个项目,引用了如下DLL:Microsoft.mshtml.dll
MsHtmHstInterop.dllMsHtmHstInterop.dll只要放到应用程序根目录下就行了,而Microsoft.mshtml.dll还需要注册才能使用。我发现:如果一个DLL是由你程序中代码直接使用的,那它不需要注册。比如MsHtmHstInterop.dll,它提供了一些接口和类的定义,供我代码中使用。因此只要把MsHtmHstInterop.dll放到应用程序目录下,就不会出问题。因为我的.exe是它的直接且唯一使用者,我的.exe在运行时首先在同目录下找到MsHtmHstInterop.dll。Microsoft.mshtml.dll是我程序中的webBrowser使用的。众所周知webBrowser是使用IE内核的。所以,我所引用的Microsoft.mshtml.dll其直接用户其实是IE组件而不是我的.exe。这么一来,如果不注册Microsoft.mshtml.dll,程序就会出问题。如何注册C# DLL呢?我的方法是:
编写一个bat文件gacutil /i dllname.dll 
RegAsm dllname.dllRegAsm和gacutil在VS里有,把它们和DLL一起打包到客户机器上。欢迎讨论