4

想知道是否有人对这个 2010 年的错误有解决方案。我有一个在 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 类似的问题,人们只需添加一个前置步骤即可将锁定的 dll 移动到另一个名称(.locked)并构建。好吧,这是第一次工作,但是下次运行然后编辑时,您将被锁定在当前 dll 和您移至 .locked 的 dll 之外,所以除非我愿意添加代码以随机生成锁定 dll 的名称,这对我不起作用(我不希望我的调试目录大小随着文件永远不会被删除而增长。)

我只找到了一种解决方法,如果您在同一条船上,这就是我必须做的编辑和运行。在我在调试器中运行我的项目之前,我确保每个设计视图窗口都已关闭。如果关闭所有打开的设计视图窗口 devenv.exe 将不会保存 dll。

有没有人有更好的解决这个问题的方法?

4

2 回答 2

3

我不确定这是否适合您,但是如果您在 AssemblyInfo.cs 中有此行​​,则会出现类似的问题:

[assembly: AssemblyVersion("2.0.*")]

将其更改为:

[assembly: AssemblyVersion("2.0.0.0")]

将解决这个问题。

Visual Studio 附加组件“ VSCommands ”声称已修复此问题。我还没有测试过它,但它也声称有一个 in-IDE stackoverflow 声誉跟踪器,这让我很感兴趣 :)

您的“调试前关闭设计器”解决方法似乎对我有用(到目前为止),对此我非常感激。它开始进入我一天的大部分时间都花在以下工作流程中的阶段......

  1. F5

  2. 大声咒骂

  3. ALT F4

  4. WIN 3

  5. 不耐烦地等着……

  6. F5
于 2010-11-04T12:32:47.883 回答
1

我有同样的问题很长一段时间,然后突然他们消失了。我意识到问题的根源是在 WCF 服务和 WPF 控件的构造函数中初始化代码。在将构造函数从任何依赖项清除到其他程序集之后,一切都很好。

所以我的建议是:清理你的构造函数。

在 WPF 中,可以插入:

if (DesignerProperties.GetIsInDesignMode(this)) return;

或类似的将具有相同的效果。

于 2010-12-14T09:10:23.490 回答