请问一个解决方案(sln)中如果有多个项目(projects),如何才能顺利编译?

Muf 2002-07-20 11:20:52
我现有一个工程(solution),内有十几个项目(projects),有好多项目有互相依赖关系。

当编一个项目时,不管你的代码是否改过,它总是重新编译。

这导致一个问题:在编译时,常常提示某某项目的目标文件xxx.dll无法复制到文件。

目前解决方法是
1 重新编译之前,先关掉VisualStudio,然后将所有生成文件(主要是*.dll)全部删除;2 然后再由VisualStudio重载解决方案(sln)
3 再一个项目一个项目按依赖顺序编译(不可由VS自动编译,否则仍有那个错误提示)

当修改程序时,累死人。

各位可有解决方法?
...全文
1559 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Muf 2003-05-09
  • 打赏
  • 举报
回复
还是没解决,不过辛苦各位了。
Muf 2003-05-09
  • 打赏
  • 举报
回复
最近怎么回事,结贴时老报服务器错?
NaZiChong 2003-05-06
  • 打赏
  • 举报
回复
if your solution containes serval projects, you can create a bat file to compile your solution.
wljcan 2003-05-06
  • 打赏
  • 举报
回复
我也出现过这种情况,出现你所说的这种情况有两个原因:
1、项目生成顺序不正确。解决方法是:先从方案中删除所有项目,再按顺序添加;
2、编译时,生成的动态库正在被使用,如:你将多个项目生成到同一目录下,而这些项目之间又存在引用关系。解决方法是:不要将有关联的项目生成到同一目录下。



daehappy 2002-07-21
  • 打赏
  • 举报
回复
up!gz!
Muf 2002-07-20
  • 打赏
  • 举报
回复
我还发现,单个项目编译可以通过的情况,如果改成“生成解决方案”(已经设置好依赖关系),那个生成100%不成功,因为每生成一个项目,它总把所依赖的其它项目重新编译一次,晕!!
sumtec 2002-07-20
  • 打赏
  • 举报
回复
嗯,有这种可能性,不过我还在思考是否是别的什么原因。
另外,编译生成是在Debug或者Release目录里面,引用或运行的是在Bin目录里面,所以如果是无法拷贝的话,那就应该是共享冲突,这个原因是肯定的。
Muf 2002-07-20
  • 打赏
  • 举报
回复
我认为是VS.NET的问题。
举个例子说明,当我用VS.NET打开程序时,VS.NET将自动编译生成所引用COM的interop dll库,并复制到bin目录下。我的理解是,由于多处引用了dll,所以VS.NET自动装载了该dll,而在编译时并没释放,导致编译成功,但复制出现文件存取冲突。
另外,我发现国外也有许多人遇到过这个问题,甚至有人专门写一个工具来阻止dll存取冲突。可惜的是,这个工具对于上面的(3)来说,没有效果。
sumtec 2002-07-20
  • 打赏
  • 举报
回复
你把VS.NET关掉再打开也不行?按道理你关掉VS.NET之后能拷贝,那么打开VS.NET也应该能够编译才对啊?

这个问题好像没办法解决了。
另外,你运行的程序是不是正常退出了也会有这个问题?
Muf 2002-07-20
  • 打赏
  • 举报
回复
是正式版。
不删除就算重启机器,仍然有几个DLL编译后报错。但编译是成功了,在obj下在的debug或release中。报错原因是无法将dll拷到bin中。
不想重新编译也可以,只要把VS.net关掉,手工copy编译成功的dll到bin中就行了。
我的sln的依赖关系如下:
1 2
\ /
3 --- interop COM (VC.NET Atl, 及其它 COM)
/\
4 5
\/
6
/ \
7 8

其中出问题最历害的是3. 6-8完全没问题。(1-6是dll, 7-8是exe)
sumtec 2002-07-20
  • 打赏
  • 举报
回复
嗯?我好像没有这个问题嘛!是不是Beta版?
如果不是的话,我觉得有一点奇怪:
您说关掉VS.NET,然后删除DLL。如果能删除就应该不会再出现这个问题,也就是说不删除然后打开VS.NET就能够编译通过了。

我以前试过类似的情况:一个程序用到同一个SLN里面另外一个vbproj的一个DLL,然后在运行的时候异常,暂停,停止运行,结果那个DLL就没有正常卸载。如果是异常,暂停,继续运行,导致系统终止运行,那么就没有问题。另外如果通过“TaskMan”终止(异常的情况下),也会锁定DLL。这时候只要关掉VS.NET在打开就行了。

不知道在你那里引起问题之前的操作是什么?

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧