构建 / 运行 一个针对 .Net 4 的应用程序安装了 .Net 4 或 .Net 4.5 之间有什么区别吗?
Is there any difference between building / running an application targeting .Net 4 having installed .Net 4 or .Net 4.5?
如果您只安装了 .Net 4 Framework 或 .Net 4.5 Framework,构建/运行 以 .Net 4 为目标的应用程序有什么不同吗?
我的一位同事说,即使应用程序以 .Net 4 为目标,安装 4.5 也会有所不同,我不确定。
针对 .NET 4.0 并在带有 .NET 的服务器上构建的 HgLab(这是一个内部部署的 ASP.NET 应用程序)我遇到了 大量 问题4.5 安装。
我不使用任何花哨的东西,只使用稳定的 public API 和 明确地 目标 .NET 4.0。然而,它在 64 位系统上 kernelbase.dll
内部一直崩溃,产生无法辨认的崩溃转储,并且通常表现得非常奇怪。
我最后做的是在 64 位版本的 IIS 中启用 32 位应用程序支持 - 这似乎已经解决了问题。但一般来说,如果您想真正以 .NET 4.0 为目标,请在安装了 仅 .NET 4.0 的构建服务器上进行构建。
NET 4.5 是 .NET 4 的 "in-place upgrade",因此即使您以 .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)
"minor"版本正在升级中
是的,这是一个例子:
以下控制台应用程序应在未安装 .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();
}
}
根据 Microsoft 的说法,您应该可以 configure this behaviour in App.Config
,但它对我根本不起作用。
如果您只安装了 .Net 4 Framework 或 .Net 4.5 Framework,构建/运行 以 .Net 4 为目标的应用程序有什么不同吗?
我的一位同事说,即使应用程序以 .Net 4 为目标,安装 4.5 也会有所不同,我不确定。
针对 .NET 4.0 并在带有 .NET 的服务器上构建的 HgLab(这是一个内部部署的 ASP.NET 应用程序)我遇到了 大量 问题4.5 安装。
我不使用任何花哨的东西,只使用稳定的 public API 和 明确地 目标 .NET 4.0。然而,它在 64 位系统上 kernelbase.dll
内部一直崩溃,产生无法辨认的崩溃转储,并且通常表现得非常奇怪。
我最后做的是在 64 位版本的 IIS 中启用 32 位应用程序支持 - 这似乎已经解决了问题。但一般来说,如果您想真正以 .NET 4.0 为目标,请在安装了 仅 .NET 4.0 的构建服务器上进行构建。
NET 4.5 是 .NET 4 的 "in-place upgrade",因此即使您以 .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)
"minor"版本正在升级中
是的,这是一个例子:
以下控制台应用程序应在未安装 .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();
}
}
根据 Microsoft 的说法,您应该可以 configure this behaviour in App.Config
,但它对我根本不起作用。