C#:我有一个System.Data.DB2.dll文件,是这家封装的一个程序中用到DB2操作的类我发布程序的时候,不想将这个dll放在和exe同目录下,我想将这个dll同系统其他dll(如System.dll、System.Drawing.dll等)一样,就是不显示在程序安装目录中,请问有什么方法可以作到?我的几个想法:1.是不是将System.Data.DB2.dll复制到C:\WINDOWS\system32目录下就可以了?2.是不是将System.Data.DB2.dll复制到C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727目录下(即和System.dll同目录下)  就可以了?3.是不是将System.Data.DB2.dll放到C:\WINDOWS\assembly目录下就行了?你看System.dll、System.Drawing.dll它们都在  那。但好象C:\WINDOWS\assembly目录不是随便复制就能将文件放进去的吧?具体该怎么做呢?===========================================================最后问下:当我们在程序中引用using System.Drawing;的时候,它会去哪里找这个System.Drawing.dll,是我上面提到目录中的哪个?  不要见笑,小弟基础知识比较薄弱。 谢谢

解决方案 »

  1.   

    不单单是拷贝一个dll,还有其依赖库
      

  2.   

    我这个System.Data.DB2.dll是自己写的,只要这个dll就能的,没什么库文件了知道的继续帮忙
      

  3.   

    copy到%systemroot%\system32\目录
    然后用regsvr32命令注册dll参考这里 http://baike.baidu.com/view/40743.htm?fr=ala0
      

  4.   

    做个安装项目,有个特殊目录“system”,把dll放进去就是了,安装玩自动放system32里会去system32下找、还会去系统变量path里找,最后去你exe所在目录找
      

  5.   

    我放了system32下   还是不管用啊
     我程序里不是通过[DllImport]来引用的   是同过using,和using System.Drawing一样
      

  6.   

    你如果是要using c#的dll,当然是要先添加引用咯,在添加引用的时候不是会让你选择要引用的dll么
      

  7.   

    这个问题根本就不是什么问题
    你自己看看C# 上的System...什么的,还不是要添加进去,才可以引用
      

  8.   

    不是我Debug的时候,我说的是发布的时候,这个问题好象与GAC有关等待高手
      

  9.   

    说白了  我只想将这个dll同.NET自带的那些如System.dll、System.Drawing.dll一样用
      

  10.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    不知所云
    上面哪一个没有在引用文件里呆着
      

  11.   

    貌似要通过工具才能把自己的DLL放到C:\WINDOWS\assembly 里面的
    http://www.cnblogs.com/skywind/archive/2007/03/28/691284.html
      

  12.   

    想要将自己的编写的.net下的dll文件添加到全局缓存去,也就是C:\WINDOWS\assembly中,需要两个步骤。
    一、你必须给你的dll文件添加密钥,项目属性中可以设置,具体方法自己网上找。
    二、使用gacutil.exe /i来安装它,gacutil.exe在你的VS安装目录下有,启动vs的命令行就自动添加环境变量了。至于使用,自然还是需要添加引用啦,只不过引用时要找全局dll,也就是“.NET选项卡”
      

  13.   

    楼上的方法经过验证是对的  谢谢  的确是注册安装到GAC  但是: "使用gacutil.exe /i来安装它,gacutil.exe在你的VS安装目录下有"我这家在这Debug是没问题,关键是我最后打包成安装程序.msi发布给用户用时,怎么注册安装这个dll到GAC里呢,用户那可不像我们程序员这边,有VS自带的gacutil.exe工具啊
      

  14.   

    用户那可不像我们程序员这边,有VS自带的gacutil.exe工具啊
    这个你也知道,那你做这些多是无用功
      

  15.   

    还有GAC安装好象需要管理员身份的哦
      

  16.   

    自己写的dll,命名空间不应该用System.XXXXX来起头
      

  17.   


    这个简单,只要将你VS安装目录下的gacutil.exe和gacutil.exe.config两个文件复制到用户那里就可以执行了。使用Windows自带的搜索功能找下文件的位置吧。
      

  18.   

    通过实践发现,注册安装GAC是最好的方法,但要求打包工具要支持安装GAC,同时安装时需要管理员权限
      

  19.   

    不懂为什么要这么干...而且自己写的dll用System这个namespace不符合规范...
      

  20.   

    一般情况下,不推荐非系统的程序集放到GAC中,
    应该这样操作,在安装文件下再建立一个子文件夹专门用来存放自己写的DLL文件,这样看起来也清爽
    假设安装文件夹是D:\MyProgram,主程序及一些其他可执行文件放在该文件夹下,
    然后再建立一个子文件夹,假设为d:\MyProgram\Dlls
    将各种自己写的及第三方的DLL放到该子文件夹中,
    那么怎以能使程序搜索到这些DLL文件呢
    在配置文件中增加一节,如下
    <configuration>
       <runtime>
          <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
             <probing privatePath="bin;bin2\subbin;bin3"/>
          </assemblyBinding>
       </runtime>
    </configuration>
    可以在MSDN中索引<probing>其中"bin;bin2\subbin;bin3"就是你指定的搜索路径,可以有多个,用分号分隔,
    要求是这些文件夹必须是启动文件(主程序文件)所以文件夹的子文件夹。