【问题标题】:Why are referenced assemblies locked?为什么引用的程序集被锁定?
【发布时间】:2010-08-11 16:30:04
【问题描述】:

我有 2 个程序集。 Assembly2 由 Assembly1 引用。 为什么 Assembly2 被锁定?

我认为整个程序集是由 JIT 编译器加载到 RAM 中的,不是吗?

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

【问题讨论】:

  • 因为可能有一些进程在锁定它们。这是一个什么样的问题?你真的期待一些有用的答案吗?
  • @Darin Dimitrov;如果他们问这个问题,也许他们希望得到一个有用的答案?也许告诉他们为什么这是一个不好的问题。 :-)
  • 获得了更多关于您的问题的信息,女巫大会何时被锁定,为什么会出现问题?
  • @Dean J,我认为很明显,当您期待有用的答案时,您首先要描述一些场景,您想要实现的目标,您尝试实现的目标,什么没有'不起作用,预期/实际结果是什么,等等......这个问题目前都不存在。
  • @Darin Dimitrov;然后告诉他们。它们的声望仍然低于 500,并且对于 C# 来说可能相当新。与其被动地告诉他们他们问了一个愚蠢的问题,不如试着帮助他们,也许吧?请注意,Assaf Lavie 解决了这个问题。

标签: c# .net assemblies reference


【解决方案1】:

(是的,这个问题本来可以更好,仍然......)

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

【讨论】:

  • 我以为整个程序集都在 RAM 中,不是吗?
  • @Rookian 这是个好问题。我想知道是整个程序集被加载到内存中还是只是需要被其他应用程序引用的部分,即标记为public的部分。
【解决方案2】:

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

我后来意识到这很有意义。如果引用应用程序(在我的例子中是 VB6 IDE)每次使用它时都相信该库是相同的,那么如果在应用程序在内存中时 dll 发生更改,它将遇到严重的问题。

就我而言,关闭 VB6 IDE、更新 dll 并重新打开 VB6 IDE 工作正常。这对我的工作流程造成了一点阻碍,但一旦我意识到它发生的原因,我就克服了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 2012-10-28
    相关资源
    最近更新 更多