如果你的utility.dll是另外一个项目的话,应该使用 “添加引用->项目”来添加这个引用,而不应该直接添加utility.dll这个动态链接库,如果添加了动态链接库的话,就可能在从新生成utility.dll之后出现引用失效的情况。

解决方案 »

  1.   

    前两个问题我做项目的时候也遇到过第一种还没发现什么好的解决方法。第二种好象是你里面的几个子工程同时引用才会出现这个问题。如果你的dll没改变的话不用管它直接跑就行了,如果改了的话,我现在是一个一个子工程编译,这样就不会有问题了。不过比较烦。
      

  2.   

    第一个问题,是版本冲突问题,最好的方法是gac你的这个类库,引用的时候,在属性里选择不拷贝到本地
     
     fly(会员) 10:39:54
    第二个问题,假如你有一个solution正在引用一个utility 的debug里的dill,你再用utility的项目编译的时候就会说:无法写入 obj\debug\utility.dll 文件 ,这时你关闭引用这个dill的solution,再编译就不会出错.. 
     fly(会员) 10:44:11
    第3个问题,曾经遇到过 ,只要不自己手动改动initializeComponet函数里的数据,一般不会出这个错..别的情况没有遇到过...
      

  3.   

    任海峰...dearfellow就是你兵哥啦...哈哈
      

  4.   

    第二个问题,如果你是通过添加项目引用得到utility.dll 的话,我是这样解决的:
    将该引用的“复制到本地”属性设为true.
      

  5.   

    第二个问题 项目引用也不会出现这个问题...不要直接引用一个项目下的dll
      

  6.   

    第一个问题 在大solution里全部用项目引用(不直接referenc 一个具体的dll)的话,也不会出现这种问题,问题是你总是引用一个具体的dll,版本出现问题,就会出错...
      

  7.   

    .   因为vs.net设计器在设计窗口被激活时要执行该窗体的初始化方法(initializeComponet),你在项目中使用了自定义的窗体基类,所以从该基类派生的窗口在初始化时要调用基类组件的方法,所以你应该保证基类及其依赖组件都是可用的,否则在设计窗口就会看到的许多错误信息-空白-红叉之类。
        所以对于作为基类的dll项目最好在稳定后从解决方案中排除出去,其它项目只引用发行的utility.dll (拷到指定的引用目录或发布到GAC),不要引用utility.dll 的项目-这样只会让你的项目增加一些莫名其妙的混乱,因为默认情况下项目引用是被自动编译然后把结果dll拷贝到引用者的编译输出目录(当然你也可以通过设置该引用的“复制到本地”属性设为false),如果你引用utility.dll项目的obj目录下的dll就麻烦了,因为被引用的文件被使用中(设计器执行初始化的缘故)是无法写入了,而这个目录中都是编译使用的临时目录导致utility.dll都无法成功编译。
      

  8.   

    谢谢楼上各位的解答。我现在使用了强名称的 utility.dll ,引用它的项目里显示它的'强名称'属性为 true
    可发现如果不选择复制到本地,编译时正常
    运行 exe 时,就会报出无法找到 utility.dll 的错误~~~真是奇怪 啊~~~
      

  9.   

    好问题,支持!
    几个项目都引用了 utility.dll ,在编译某个项目时,偶而会出理“obj\debug\utility.dll正被使用,无法写入 obj\debug\utility.dll 文件,。”字样的错误,我引用的都是 obj\debug\utility.dll 
    如果引用他的某个程序正在运行,当然不能写入了。
    你可以用版本控制软件cvs   or vss等解决这些问题。
    我猜想,你们公司团队开发,没有使用版本控制软件,这回很麻烦的。
      

  10.   

    各位,我们当然使用版本控制,用的是 VSS 。个人认为和 VSS 没有关系,因为以前单机开发时也会有该问题。
      

  11.   

    回复人: dearfellow(爱和我都在北京了) ( ) 信誉:95  2004-12-16 10:46:00  得分: 0  
      
       任海峰...dearfellow就是你兵哥啦...哈哈==============================
    任海峰?哪个ID是他?
    dearfellow又是哪个?
      
     
      

  12.   

    我一直都不明白 什么叫release,有人告诉我嘛?
      

  13.   

    你是在添加引用的时候点击浏览把utility 作为dll进行引用,而该dll又是utility项目生成的utility\bin\debug或release的目录里,然后调试包含utility引用的多个多个项目,在调试过程中(调试实例没有关闭),又对utility项目进行调试,导致新的utility不能生成到debug或release。因为旧的正在被使用。
    所以会出现
    ======================================================
    警告: 不能将项目“EMS.Management”中的依赖项“EmsInput, Version=1.0.1812.16456, Culture=neutral”复制到运行目录,因为它将改写引用“EmsInput, Version=1.0.1815.15927, Culture=neutral”。
    ==========================================================
    上面是我测试的结果。
    解决办法,
    1.这些项目放到一个解决方案中,进行项目引用代替dll引用。
    2.把被引用的dll考出来再进行引用。
    3.不要进行同时调试。
      

  14.   

     , Winform和WebForm的设计器在使用大型商业控件的时候常常会发神经,不知为什么。