毒龙的程序人生

BASIC, C, C++, C#, Qt, 程序人生

统计

常用链接

留言簿(12)

积分与排名

blog

常用链接

阅读排行榜

评论排行榜

请求帮助:如何解决烦人的VS.NET2003编译时“无法将程序集复制到文件,另一个程序正在使用,进程无法访问”的问题?

  在Visual Studio.NET2003中的一个解决方案中建立了多个工程,都为Windows Form程序,绝大部分时间都可以正常编译,但有时会出现下面错误提示:

无法将程序集"XXXXXX"复制到文件"xxxxxxxxxxxxxxxxx"。另一个程序正在使用本文件,进程无法访问。

  遇到此问题时,我通常只能将VS.NET2003退出后,才重新打开解决方案,才能编译成功。以前出现的频率还比较少,现在不知何故越来越多了。
  真诚请教各位博客们指点!谢谢。
------------------------------------------------------------------------

posted on 2004-11-28 08:28 毒龙 阅读(4039) 评论(20)  编辑 收藏 所属分类: C#编程

评论

#1楼  2004-11-24 23:28 bigtall      

没有好的方法,我也是这么做的。一旦出现问题之后,直接去删除bin\debug和obj目录就可以了,这样才能彻底解决问题   回复  引用  查看    

#2楼  2004-11-24 23:29 zoyo [未注册用户]

是不是编译的程序正在运行中。或是占用的资源没有释放?   回复  引用    

#3楼  2004-11-24 23:37 XiaoHui      

我也碰到过这样的问题,但一直没看到过此类问题的解决方法.   回复  引用  查看    

#4楼  2004-11-24 23:41 CoolBug      

我也一直遇到过,我遇到的问题比你的还要严重,因为我的组件管理里都要手工来注册。我一般是把每层里 bin文件夹下的dll程序集删除掉再重新编译才好。   回复  引用  查看    

#5楼  2004-11-25 00:12 Yok      

禁用索引服务   回复  引用  查看    

#6楼  2004-11-25 08:24 一切由.NET开始      

这是 VS.NET 2003 的一个 Bug, 详细情况请参阅 http://support.microsoft.com/default.aspx?scid=kb;zh-cn;313512

编译时候不要把程序集创建到一个目录下,分别创建在各自目录,然后用编译后事件把文件拷到一起

ASP.NET 也可能出现,此外他还有另外一个原因 比如:http://support.microsoft.com/default.aspx?scid=kb;zh-cn;319991

希望对你有用。   回复  引用  查看    

#7楼  2004-11-25 18:50 raininwind [未注册用户]

@echo off
set tempPath=E:\

rd/s/q %tempPath%\BusinessFacade\bin

rd/s/q %tempPath%\BusinessFacade\obj

rd/s/q %tempPath%\BusinessRules\bin

rd/s/q %tempPath%\BusinessRules\obj

rd/s/q %tempPath%\CymssUI\bin

rd/s/q %tempPath%\CymssUI\obj

rd/s/q %tempPath%\CommonBase\bin

rd/s/q %tempPath%\CommonBase\obj

pause   回复  引用    

#8楼  2004-11-25 18:52 raininwind      

这是我一般的做法 :),首先你要关掉解决方案吆,微软为此bug提供的方法也不好使得!   回复  引用  查看    

#9楼  2004-11-25 22:29 sumtec      

楼上的这么费劲干什么?我一般都是直接在IDE里面按下列组合键:
ALT-B-T、ALT-S-C、Enter

完成几乎一样的功能,如果还不行就只好关闭之后再打开了。如果关闭之后再打开都不行(一般出现在.NET CF开发的情况当中),那就要把.suo文件(隐藏文件)和.csproj.user都删除掉再进去。

哦对了,还有一个比较麻烦的情况,就是出现“无法拷贝xxx.pdb文件”这种无法编译情况的时候,需要在项目属性里面的配置属性下,将生成调试信息着一栏关掉,编译一次就好了,然后再把那个属性回复成true(否则无法调试)。这个问题一般也是在.NET CF下面开发出现的。   回复  引用  查看    

#10楼 [楼主] 2004-11-26 10:01 毒龙      

谢谢各位,先试了试“一切由.NET开始”上提出的微软解决办法,我的所有项目确实都是分在不同的文件夹下,还把所有的assembly的复制到本地都设为true,但还是出现同样的问题。
然后又试了sumtec的办法,还是同样。有的时候关闭suo就行,有时必须退出后重新打开才行。
看来是没有太好的办法了,不知微软的这个bug在2005改了没有?   回复  引用  查看    

#11楼  2004-11-26 12:50 一切由.NET开始      

不知道你注意到没有,文档里面有这样一句话 “Compile the outputs for individual projects to different folders. Visual Studio .NET 2002 and Visual Studio .NET 2003 do not support a common output folder.”我的理解是不要把各个项目的输出都输出到同一个目录下,而是分别创建在各自目录,然后用编译后事件把文件拷到一起 。比如这样

copy $(TargetFileName) ..\..\Web\bin

你再试试   回复  引用  查看    

#12楼  2004-11-27 13:13 kw [未注册用户]

关于在不同 projects 之间,不同 solutions 之间如何互相 reference,可以参考 Team Development with Visual Studio .NET and Visual SourceSafe。如果 solutions 和 projects 很多,花上两天时间整理,也是值得的。

在正确使用 file reference, project reference, reference path (hint path), *.user file 之后,有时还会发现这种错误。在多数情况下,rename 那个被 lock 的文件是可以解决问题的 (一般是删除不掉的)。这样做快过 reload solution (尤其是你有 60 个以上的 projects)。   回复  引用    

#13楼 [楼主] 2004-11-28 07:55 毒龙      

to"一切由.NET开始"
我确实是将各个项目分开放,各自的输出文件放在各自目录的bin/debug下, 但没有用编译后事件,而是将一些项目引用设为复制到本地,将文件引用设为不复制到本地。但也不行。
我曾经按照微软的方案,将所有的assembly的复制到本地都设为true, 但不幸的是连窗体设计器都无法打开了,真是无耐啊。
  回复  引用  查看    

#14楼  2004-11-28 11:03 kw [未注册用户]

简言之:
0. copy to local 全部可以为 true
1. solution 内每个 project 输出到自己的 bin/debug folder
2. solution 内使用 project ref
3. solution 的启动 project 通过 ref 其他 projects,把所有 assemblies 输出到所需目录。
4. solution 之间使用 file reference
5. 随时检查 reference path
6. 注意 *.user file 是 per machine 的,不受 source safe 控制。   回复  引用    

#15楼  2004-11-28 12:22 Blaze      

有没有线程没有结束,如果这样的话也不行的。   回复  引用  查看    

#16楼  2004-11-28 18:40 CoolBug      

是不是你的vss里把bin和obj文件夹也签上去了? 这样的话就会出现无法复制***等问题。   回复  引用  查看    

#17楼 [楼主] 2004-11-28 20:45 毒龙      

to coolbug: 是不是你的vss里把bin和obj文件夹也签上去了? 这样的话就会出现无法复制***等问题。

不是,我大部分时间都可以编译成功,只是用一阵子后就不好使了。
  回复  引用  查看    

#18楼 [楼主] 2004-11-28 20:50 毒龙      

to kw:
简言之:
0. copy to local 全部可以为 true
1. solution 内每个 project 输出到自己的 bin/debug folder
2. solution 内使用 project ref
3. solution 的启动 project 通过 ref 其他 projects,把所有 assemblies 输出到所需目录。
4. solution 之间使用 file reference
5. 随时检查 reference path
6. 注意 *.user file 是 per machine 的,不受 source safe 控制。
我是这样设置的,我有一个solution, 但有多个project, 有几个project是输出win form执行程序,但设置copy to local都为true后,窗体设计器就不能用了   回复  引用  查看    

#19楼  2005-02-09 15:04 Richer      

直接Kill该进程。   回复  引用  查看    

#20楼  2005-10-01 10:13 阿明哥 [未注册用户]

原来有一个引用,但引用丢失了
fangfa:重新添加添加project引用即可
(原来这么easy,可见大家整天的时间被ms浪费了,中国人的遗恨啊)   回复  引用