Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 构建/运行针对.Net 4的应用程序与安装.Net 4或.Net 4.5的应用程序之间有什么区别吗?_C#_.net_Frameworks - Fatal编程技术网

C# 构建/运行针对.Net 4的应用程序与安装.Net 4或.Net 4.5的应用程序之间有什么区别吗?

C# 构建/运行针对.Net 4的应用程序与安装.Net 4或.Net 4.5的应用程序之间有什么区别吗?,c#,.net,frameworks,C#,.net,Frameworks,如果您只安装了.Net 4 Framework或.Net 4.5 Framework,那么构建/运行针对.Net 4的应用程序有什么区别吗 我的一位同事说,即使应用程序的目标是.Net 4,安装4.5也会有所不同,我也不确定。我对以.Net 4.0为目标并构建在安装了.Net 4.5的服务器上的HgLab(这是一个内部部署的ASP.Net应用程序)有很大的问题 我不使用任何花哨的东西,只使用稳定的公共API和明确的目标.NET4.0。然而,它在64位系统上不断地在内核库中崩溃,产生无法识别的崩溃

如果您只安装了.Net 4 Framework或.Net 4.5 Framework,那么构建/运行针对.Net 4的应用程序有什么区别吗

我的一位同事说,即使应用程序的目标是.Net 4,安装4.5也会有所不同,我也不确定。

我对以.Net 4.0为目标并构建在安装了.Net 4.5的服务器上的HgLab(这是一个内部部署的ASP.Net应用程序)有很大的问题

我不使用任何花哨的东西,只使用稳定的公共API和明确的目标.NET4.0。然而,它在64位系统上不断地在内核库中崩溃,产生无法识别的崩溃转储,通常表现得非常怪异

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

我对以.NET 4.0为目标并在安装了.NET 4.5的服务器上构建的HgLab(这是一个内部部署的ASP.NET应用程序)遇到了大量问题

我不使用任何花哨的东西,只使用稳定的公共API和明确的目标.NET4.0。然而,它在64位系统上不断地在内核库中崩溃,产生无法识别的崩溃转储,通常表现得非常怪异

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

NET 4.5是.NET 4的“就地升级”,因此即使您以.NET 4为目标,您也将使用.NET 4.5,请参阅

总结本博客,可以同时安装.NET的三个主要版本:

  • .NET 1(1.1)
  • .NET 2(2/3/3.5)
  • .NET 4(4/4.5)
“次要”版本是就地升级

NET 4.5是.NET 4的“就地升级”,因此即使您以.NET 4为目标,您也将使用.NET 4.5,请参阅

总结本博客,可以同时安装.NET的三个主要版本:

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

“次要”版本是就地升级

是的,下面是一个示例:

在未安装.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();
    }
}

根据微软的说法,你应该可以这样做,但这对我根本不起作用。

是的,这里有一个例子:

在未安装.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();
    }
}

根据微软的说法,你应该可以这样做,但对我来说根本不起作用。

我认为它是为了向后兼容而设计的,但你永远无法确定你的代码是否真的晦涩难懂,是否使用了标记为过时的功能。NET 4.5是.NET 4的“就地升级”,所以即使你以.NET 4为目标,你也将使用.NET 4.5,看@Pieter21:你是说4.5加4?请记住,这些项目针对的是4个框架,它们不会被改变。在什么方面“产生影响”?这是什么意思?你“害怕”会发生什么?@Jaco:太好了,谢谢,意思是“是的”。你能把它作为一个答案吗?我认为它是为了向后兼容而设计的,但你永远不能确定你的代码是否真的晦涩难懂,是否使用了标记为过时的功能。NET 4.5是.NET 4的“就地升级”,所以即使你以.NET 4为目标,你也将使用.NET 4.5,请参阅@Pieter21:你是说4.5加4吗?请记住,这些项目针对的是4个框架,它们不会被改变。在什么方面“产生影响”?这是什么意思?你“害怕”会发生什么?@Jaco:太好了,谢谢,意思是“是的”。你能把它作为一个答案吗?@IgnacioLergaria如果你以.Net 4.0为目标,就会发生这种情况。@IgnacioLergaria如果你以.Net 4.0为目标,就会发生这种情况。