【问题标题】:Reference.svcmap: Could not load file or assembly 'xxx' after .NET 4.5.1 UpdateReference.svcmap:在 .NET 4.5.1 更新后无法加载文件或程序集“xxx”
【发布时间】:2014-01-23 11:20:05
【问题描述】:

我们有运行 4000 个 .NET 4.0 网站的 Win2k8 服务器。我们已经尽可能地推迟了框架更新,并且在浏览器检测中遇到了 __dopostback() 问题,我们无法再解决了。

我克隆了我们的一台服务器 (VM) 并仅安装了 .NET 4.5.1 更新。好的。

我们现在遇到的问题是,4.5.1 的行为似乎发生了变化,即为模块中的 DLL 引用抛出异常,但未上传到服务器。

例如,我们有一个以 dotless.core.dll 作为参考的 Support.DLL。这仅用于 Windows 服务(引用 support.dll),但从未在 Web 应用程序中使用,因此 dotless.core.dll 从未上传(也不应该)到网站。

=== Pre-bind state information ===
LOG: DisplayName = dotless.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=96b446c9e63eae34
 (Fully-specified)
LOG: Appbase = file:///C:/inetpub/root/2362/Sites/3168/Site/
LOG: Initial PrivatePath = C:\inetpub\root\2362\Sites\3168\Site\bin
Calling assembly : Support, Version=2.1.0.0, Culture=neutral, PublicKeyToken=null.

.NET 4.0 框架从不抱怨,只是忽略了这些缺失的引用。 web.configs 中没有引用。

如果我卸载 4.5.1 框架更新,问题就会消失。所以这似乎是更新中的行为变化。是否有 registry/machine.config 选项来禁用此新行为?

不理想,但将此 DLL 放入 GAC 可以解决问题,但我们不想在 DLL 从未使用时开始将它们复制到服务器。

当应用 4.5.1 更新时,我们有近 4000 个网站将受到影响。部分原因是我们很长时间没有进行更新。从未像 MS 所希望的那样直截了当!

非常感谢,

保罗

【问题讨论】:

  • 为什么.svcmap在标题中?
  • 因为那是被抛出的异常。应该在文本周围加上引号:

标签: c# asp.net .net dll


【解决方案1】:

其实可以从根本上解决问题,因为有一个针对浏览器检测问题的修补程序:http://www.hanselman.com/blog/BugAndFixASPNETFailsToDetectIE10CausingDoPostBackIsUndefinedJavaScriptErrorOrMaintainFF5ScrollbarPosition.aspx

MSDN 对这种改变的行为只字未提:http://msdn.microsoft.com/en-us/library/hh367887%28v=vs.110%29.aspx。你有堆栈跟踪吗?也许 .NET 4.5.1 中的一些其他更改会导致您的代码在您的 DLL 中引用丢失的 DLL?

我创建了一个小型解决方案,一个类库和一个引用该类库的控制台应用程序。如果将参数传递给控制台应用程序,它会调用类库,否则不会。我编译它并删除了类库DLL。结果:当我通过参数时,它抱怨它无法加载程序集,否则根本没有任何问题。引用加载仅在您实际输入引用它的方法时发生。所以我认为这方面没有任何新的行为。

【讨论】:

    猜你喜欢
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2010-12-29
    相关资源
    最近更新 更多