想知道是否有人有这个2010年的bug的解决方案。我有一个在Visual Studio 2008中构建得很好的项目,该项目在2010年不会构建,因为Visual Studio在应用程序运行后仅在设计器窗口打开时才会持有dll。我创建了一个非常轻量级的项目来显示这个问题。如果您创建一个应用程序,则创建一个lib dll。将一个表单放在dll中,在设计视图中打开表单,然后运行该应用程序。它运行正常,然后关闭应用程序,在设计视图中转到表单的代码视图,并更改代码(我只是重命名了一个变量)然后尝试重新编译,得到以下内容:
错误1无法将文件“obj \ Debug \ customlib.dll”复制到“build \ debug \ customlib.dll”。该进程无法访问文件'build \ debug \ Customlib.dll',因为它正由另一个进程使用。
如果你运行Process Explorer并搜索dll,那么持有dll的唯一进程就是devenv.exe !!!
我已经对这个问题进行了大量的搜索,并且发现了旧版Dev Studio的类似问题,人们只能add a pre-step将锁定的dll移动到另一个名称(.locked)并构建。好吧,这是第一次工作,但下次你运行然后编辑你被锁定当前的DLL和你移动到.locked,所以除非我愿意添加代码随机生成锁定的DLL的名称,这对我不起作用(我不希望我的调试目录大小增长,文件永远不会被删除。)
我只找到了一个解决方法,如果你在同一条船上,这就是我要编辑和运行的方法。我确保在调试器中运行项目之前,每个设计视图窗口都已关闭。如果你关闭所有打开的设计视图窗口devenv.exe将不会持有该DLL。
有没有人能更好地解决这个问题?
答案 0 :(得分:3)
我不确定这是否适合你,但this similar question如果你在AssemblyInfo.cs中有这一行:
[assembly: AssemblyVersion("2.0.*")]
将其更改为:
[assembly: AssemblyVersion("2.0.0.0")]
将解决这个问题。
Visual Studio加载项“VSCommands”声称可以解决此问题。我还没有测试过它,但它还声称有一个IDE内置的stackoverflow信誉跟踪器,它引起了我的兴趣:)
您的“调试前关闭设计器”解决方案似乎对我有用(到目前为止),对此我非常感激。它开始进入我的大部分时间用于以下工作流程的阶段......
F5
响亮的咒骂
ALT F4
WIN 3
不耐烦地等待......
答案 1 :(得分:1)
我长时间遇到同样的问题然后突然消失了。我意识到问题的根源是在WCF服务和WPF控件的构造函数中初始化代码。在将构造函数从任何依赖关系清理到其他程序集之后,一切都很好。
所以我的建议是:清理你的构造函数。
在WPF中,可能会插入:
if (DesignerProperties.GetIsInDesignMode(this)) return;
或类似的将具有相同的效果。