【问题标题】:Microsoft broke .NET compatibility?微软破坏了 .NET 兼容性?
【发布时间】:2010-06-28 06:19:29
【问题描述】:

几天前,我的 .NET 3.5 应用程序在开始发出错误时开始失败

“找不到运行此应用程序的运行时版本”。

由于我没有对它们做任何事情,这对我来说看起来很奇怪。经过一番调查,我发现原因是 Windows 自动更新,它在我的计算机上安装了 .NET 3.5 或 .NET 4 的服务包(我不知道两者中的哪一个是有罪的)。该更新无法卸载,因为它未显示在控制面板的已安装 Windows 更新列表中。我必须恢复到系统还原点!

今天我的一位客户抱怨同样的问题。我不能强迫他恢复系统还原,所以我需要知道如何克服这个愚蠢的微软问题。任何人都可以分享你的想法吗?

附:该软件受 CodeVeil 1.2 保护,也许这很重要。

【问题讨论】:

  • 故障发生在哪里?您可以发布破坏的代码吗?你有堆栈跟踪吗?异常详情?还有其他相关细节吗?
  • 运行软件时出现故障。没有代码,没有堆栈跟踪,没有异常,只有关于找不到运行时错误的消息框。这在 MS Visual Studio 中是不可重现的。可能是因为使用了 CodeVeil 保护,我还不知道。
  • 这是在 XP 上吗?最近的更新为我破坏了一些 WCF 的东西。要卸载更新,请勾选添加/删除程序中的“显示更新”复选框。它也可能与System.dll 开始更新有关。

标签: .net windows auto-update


【解决方案1】:

在我们提出解决方案之前,我们需要了解这里发生了什么。解决这个问题的第一步是获取更多信息

  • 您的应用程序是针对哪个版本的 CLR 编译的?
  • 机器上安装了哪些版本的 CLR?
  • 这台机器是什么操作系统?

当应用程序针对计算机上未安装的 CLR 版本编译时,通常会出现此错误消息。例如,有一个 2.0 的应用程序,但只有一个 4.0 的 CLR。

【讨论】:

  • 在我的机器上我有 3.5(哦,是的,这实际上是 2.0:)。该应用程序被编译为使用 3.5。该软件在安装更新之前工作。我没有做任何事情,所以这是破坏软件的更新。我恢复到系统还原,软件再次运行。我的 Windows 是 7、64 位。
  • 这很有趣,不是吗?微软没有设法设计出向后兼容的 CLR?
  • @chiccodoro,CLR 在很大程度上是向后兼容的,但真正的 100% 向后兼容意味着您根本无法真正改变太多。很多有趣的例子,其中非常细微的变化会导致难以追踪应用程序中的问题。这是他们决定 2.0 应用程序不会自动升级到 4.0 CLR 的原因之一。可以通过在 .config 文件中添加 supportedRuntimes 条目来完成。
  • @Alex 如果有更新,它应该显示在其中一个日志中。您是否检查了控制面板中的“程序和功能”条目并单击了“查看已安装的更新”?
【解决方案2】:

感谢大家的帮助!

我终于发现这是旧的 CodeVeil,它破坏了应用程序是有罪的。安装 .NET 4.0 更新后,所有受 CodeVeil 1.2 保护的应用程序都被彻底破坏。我购买了最新版本的产品,现在可以使用了。

【讨论】:

    【解决方案3】:

    在我的情况下,问题很容易解决,在 app.config 文件中添加以前的运行时版本,如此处所述 https://msdn.microsoft.com/en-us/library/jj152935(v=vs.110).aspx

    <?xml version="1.0"?>
    <configuration>
        <startup>
            <supportedRuntime version="<YOUR_VERSION>"/>
        </startup>
    </configuration>
    

    在你的情况下,上面的文档应该是“v2.0.50727”,因为这个字符串也被映射到 .NET 3.5。

    有可能的版本列表 https://msdn.microsoft.com/en-us/library/jj152935(v=vs.110).aspx

    【讨论】:

    • 您的解决方案很容易破坏构建 :) 正如我所说,我的应用程序是 .NET 3.5。
    • @Alex,我又遇到了同样的问题,我搜索了那些字符串版本。根据msdn.microsoft.com/en-us/library/jj152935(v=vs.110).aspx,.NET 3.5 的正确字符串实际上是“v2.0.50727”。如果这是正确的,那么原来的答案也是正确的。
    猜你喜欢
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    相关资源
    最近更新 更多