为什么引用的组件被锁定?

时间:2010-08-11 16:30:05

标签: c# .net assemblies reference

我有2个装配。 Assembly2由Assembly1引用。 为什么Assembly2被锁定?

我以为整个程序集都是由JIT-Compiler加载到RAM中的,不是吗?

当调用引用的程序集时,机械工作如何工作?

2 个答案:

答案 0 :(得分:3)

(是的,问题可能会更好,仍然......)

引用的程序集被加载到进程中并因此被锁定。您可以使用卷影复制解决此问题,或者只是确保在尝试修改它们之前关闭使用程序集的每个进程。

答案 1 :(得分:1)

我遇到了编写.NET组件以便在VB6应用程序中使用的情况,在VB6编辑器打开时我无法部署我重新编译的.NET程序集。这真让我感到沮丧,因为我希望能够快速更改,然后在我的VB6编辑器中显示更改。我收到一条错误消息,表示程序集被另一个进程或线程锁定。

我后来意识到这很有道理。如果引用应用程序(在我的情况下,VB6 IDE)在每次使用它时都信任该库是相同的,那么当应用程序在内存中时,如果dll发生更改,则会遇到严重问题。

在我的例子中,关闭VB6 IDE,更新dll,并重新打开VB6 IDE就可以了。这在我的工作流程中有点障碍,但是一旦我意识到它为什么会发生,我就克服了它。