【问题标题】:One web application with two dlls. One dll is dependent upon the other. Why do I have to update both DLLs?一个带有两个 dll 的 Web 应用程序。一个dll依赖于另一个。为什么我必须更新两个 DLL?
【发布时间】:2016-10-19 22:00:43
【问题描述】:

我有一个 Web 应用程序,它有两个以 DLL 形式引用的程序集。让我们调用 DLL Primary.dll 和 Secondary.dll。 Secondary.dll 依赖于 Primary.dll。

我需要向 Primary.dll 添加一项功能,以便在 Web 应用程序中使用。这需要一个新版本。 Secondary.dll 不需要此新功能。 Secondary.dll 没有重大更改。

现在,当 Secondary.dll 中的一些代码被触发时,我收到以下错误:

“无法加载文件或程序集 'Primary.dll' 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。”

Secondary.dll 正在寻找 Primary.dll 的特定版本

这是否可以通过在 Secondary.dll 项目文件中设置 SpecificVersion="false" 值来解决?

如果没有,我考虑将旧版本的 Primary.dll 保留在 GAC 中,这样 Secondary.dll 就会在那里找到它。但如果可能的话,我想避免这种情况。

所以现在每次我对 Primary.dll 进行更改以供 Web 应用程序使用时,我都不得不重建和重新版本 Secondary.dll,并引用更新后的 Primary.dll。

p>

有没有办法让我不必更新 Secondary.dll 对新版本 Primary.dll 的引用?

【问题讨论】:

  • 您正在签署您的程序集吗?
  • 只有primary.dll被签名。但它是secondary.dll的一个选项

标签: c# .net visual-studio dll


【解决方案1】:

如果更改真的没有破坏,请尝试以下方法:

  1. 检查 Primary.dll 的程序集属性,去掉签名和自动生成的程序集版本(将 1.0.0.* 更改为 1.0.0.0)。
  2. 如果没有帮助,请使用 ILSPY 实用程序打开 Secondary 和 Primary,检查对 Primary.dll 的确切引用,并将其与 Primary.dll 的实际完整程序集名称进行比较。还要检查对其他 dll 的引用,这些 dll 可以在 Primary 和 Secondary 中引用。
  3. 如果没有帮助,可能是您有多个具有不同元数据的 Primary.dll 程序集文件,并且程序集加载器加载了错误的文件。只需查找并删除错误文件或使用 Fusion Log Viewer 实用程序来探索程序集绑定。也许,this can help

为了让调查更简单,使用简单的几乎为空的ConsoleApplication参考Secondary.dll来播放,而不是Web应用程序。

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 2012-05-17
    • 2012-01-04
    • 1970-01-01
    相关资源
    最近更新 更多