【问题标题】:.Net 3.5 Dll's in a .Net 4.0 application any issues.Net 3.5 Dll 在 .Net 4.0 应用程序中的任何问题
【发布时间】:2011-05-18 20:44:21
【问题描述】:

我们计划迁移一个使用企业库 4.1 的遗留应用程序,该应用程序在 .Net 4.0 Web 应用程序中使用 .Net 3.5。

我们想知道这会导致任何性能问题吗? .net 3.5 代码会以不同的方式运行吗 应用程序池?

【问题讨论】:

    标签: .net performance web-applications enterprise-library


    【解决方案1】:

    我终于找到了答案。我之前提到我的团队发现的性能问题是由于其他原因造成的。不在 .NET 4.0 应用程序域上加载 .NET 3.5。

    阅读这篇文章: http://msdn.microsoft.com/en-us/magazine/ee819091.aspx

    In-Proc SxS 不能解决 面临的兼容性问题 图书馆开发商。任何库 直接加载 应用程序——无论是通过直接 引用或 Assembly.Load--will 继续直接加载到 运行时和 AppDomain 的 应用程序加载它。这表示 如果重新编译应用程序 针对 .NET Framework 4 运行 运行时并且仍然有依赖 针对 .NET 2.0 构建的程序集, 这些家属将加载到 .NET 4 运行时也是如此。因此,我们仍然 建议测试您的库 针对所有版本的 您希望支持的框架。这是 我们继续的原因之一 保持我们的高水平落后 兼容性。

    因此,将 .NET 3.5 程序集直接加载到 .NET 4.0 应用程序中没有问题,而无需将它们重新编译到 .NET 4.0 中。

    【讨论】:

      【解决方案2】:

      4.0 是 3.5 的超集,所以应该没有挑战。你们所有的 3.5 代码都将像使用 VS 2008 构建时一样工作。您需要先遵循这一点
      有一个MSDN链接What's New in the .NET Framework 4
      Migration Guide to the .NET Framework 4
      .NET Framework 4 RTM Application Compatibility Walkthrough

      如果您进行 Google 搜索,您会发现许多标题为“2010 年的新变化”之类的文章。你不会找到诸如“有什么不同”之类的东西

      除了这个来自 MSDN 的小花絮:

      .NET Framework 4 高度 与应用程序兼容 使用早期的 .NET Framework 构建 版本,除了一些更改 旨在提高安全性, 标准合规性、正确性、 可靠性和性能。

      .NET Framework 4 没有 自动使用它的版本 要运行的公共语言运行时 构建的应用程序 .NET 的早期版本 框架。运行较旧的应用程序 使用 .NET Framework 4,您必须 编译你的应用程序 目标 .NET Framework 版本 在您的属性中指定 Visual Studio 中的项目,或者您可以 指定支持的运行时 应用程序中的元素 配置文件。


      【讨论】:

      • -1:“所以应该没有挑战。你们所有的 3.5 代码都将像使用 VS 2008 构建时一样工作”:重大更改列表实际上很长,请参阅此处获取条目指向各种 .NET 技术:.NET4 Complete List of Breaking Changes。一般来说,产品的任何变化,包括 .NET 运行时环境的变化,都应该伴随着大量的测试。
      【解决方案3】:

      您质疑是否会有性能问题通常无法回答,因为这取决于您的代码在做什么。您很可能不会看到任何问题。

      尽管 Microsoft 为保持与先前版本的运行时向后兼容做了很多工作,但您应该知道有几个重大更改。您将在此处的 MSDN 中找到它们的文档:

      .NET Framework 4 Migration Issues(包括关于 ASP.NET、.NET Core、Data/ADO.NET、WCF、WPF 和 XML 的文档)

      Microsoft 还提供了进一步的迁移计划任务的指南和链接:

      Migration Guide to the .NET Framework 4

      因为您应该为任何问题做好准备,所以不要忘记安排一些时间进行额外的测试。

      【讨论】:

        【解决方案4】:

        计划进行自己的性能测试。如需指导,请参阅模式和实践中的this

        我不知道您正在使用哪些块,但您应该考虑迁移到 EntLib v5.0,因为日志记录应用程序块的性能得到了重大改进,并且对底层基础架构进行了重构/清理。查看Migration Guide for Enterprise Library 5.0

        【讨论】:

          【解决方案5】:

          嗯,它不应该有任何性能问题。但是,一个主要区别是 .Net 4.0 带有不同的运行时,这可能会引入一些差异。

          【讨论】:

            【解决方案6】:

            .NET 3.5 DLL 加载在与 .NET 4 不同的应用程序域中。因此,从 .NET 4 对 .NET 3.5 DLL 的所有调用都将跨应用程序域进行。这意味着相当多的开销。除非您可以在 .net 4 中重建 3.5 源代码,否则我不建议您使用它。我的一个团队尝试过,然后他们发现性能很差,所以他们回到了 .NET 3.5。在我们获得所有 .net 3.5 DLL 的源代码或供应商发布 .net 4 DLL 之前,我们不会将我们的代码库升级到 net 4。

            【讨论】:

            • 你有这方面的参考吗?
            • 根据我目前的经验,我希望 Omar 可能是正确的,但是在启动 Process Exprlorer 并查看之后,我只看到两个 AppDomain 加载了“SharedDomain”和“DefaultDomain”,而我没有查看任何证据表明只有 3.5 程序集被加载到其中一个域中。而是将除 mscorlib 之外的所有程序集加载到 DefaultDomain。更多细节在这里msdn.microsoft.com/en-us/magazine/cc163791.aspx#S4
            猜你喜欢
            • 1970-01-01
            • 2011-04-07
            • 2011-05-17
            • 2011-08-10
            • 1970-01-01
            • 2011-05-20
            • 1970-01-01
            • 2010-12-09
            • 2012-06-21
            相关资源
            最近更新 更多