【问题标题】:Is there any difference between building / running an application targeting .Net 4 having installed .Net 4 or .Net 4.5?在安装.Net 4 或.Net 4.5 的情况下构建/运行针对.Net 4 的应用程序有什么区别吗?
【发布时间】:2015-08-25 12:20:38
【问题描述】:

如果您只安装了 .Net 4 Framework 或 .Net 4.5 Framework,构建/运行面向 .Net 4 的应用程序有什么不同吗?

我的一位同事说,即使应用程序以 .Net 4 为目标,安装 4.5 也会产生影响,我不确定。

【问题讨论】:

  • 我认为它被设计为向后兼容,但你永远无法确定你的代码是否真的晦涩难懂并且使用了标记为过时的功能。
  • NET 4.5 是 .NET 4 的“就地升级”,因此即使您以 .Net 4 为目标,您也将使用 .NET 4.5,请参阅 hanselman.com/blog/…
  • @Pieter21:你的意思是 4.5 和 4?请记住,这些项目针对的是 4 框架,并且不会更改。
  • “有所作为” 在什么方面?这意味着什么?你“害怕”会发生什么?
  • @Jaco:太好了,谢谢,这意味着“是”。你能把它作为答案吗?

标签: c# .net frameworks


【解决方案1】:

NET 4.5 是 .NET 4 的“就地升级”,因此即使您以 .Net 4 为目标,您也将使用 .NET 4.5,请参阅http://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx

总结本篇博客,.NET 的三个主要版本可以并排安装:

  • .NET 1 (1.1)
  • .NET 2 (2/3/3.5)
  • .NET 4 (4/4.5)

“次要”版本已就地升级

【讨论】:

    【解决方案2】:

    我在使用 HgLab(它是一个本地 ASP.NET 应用程序)针对 .NET 4.0 并在安装了 .NET 4.5 的服务器上构建时遇到了大量问题。

    我不使用任何花哨的东西,只使用稳定的公共 API 并且明确以 .NET 4.0 为目标。然而,它在 64 位系统上继续在 kernelbase.dll 的深处崩溃,产生难以辨认的故障转储,并且通常表现得非常奇怪。

    我最终做的是在 64 位版本的 IIS 中启用 32 位应用程序支持 - 这似乎已经解决了问题。但一般来说,如果您真的想以 .NET 4.0 为目标,请在仅安装了 .NET 4.0 的构建服务器上进行构建。

    【讨论】:

      【解决方案3】:

      是的,这是一个例子:

      以下控制台应用程序应在未安装 .Net 4.5 或更高版本的系统上抛出 UnobservedTaskException,但如果已安装 .Net 4.5 或更高版本,它将永远循环:

      private static void Main()
      {
          Task.Factory.StartNew(() => { throw new InvalidOperationException("Erk"); });
      
          while (true)
          {
              Thread.Sleep(100);
              GC.Collect();
              GC.WaitForPendingFinalizers();
          }
      }
      

      根据微软的说法,你应该可以configure this behaviour in App.Config,但它对我根本不起作用。

      【讨论】:

      • @IgnacioSolerGarcia 如果您的目标是 .Net 4.0,就会发生这种情况。
      猜你喜欢
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多