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
允许使用.NET 2.0构建的C#应用程序在.NET 4.0/4.5上运行_C#_.net_.net 4.0_.net 2.0 - Fatal编程技术网

允许使用.NET 2.0构建的C#应用程序在.NET 4.0/4.5上运行

允许使用.NET 2.0构建的C#应用程序在.NET 4.0/4.5上运行,c#,.net,.net-4.0,.net-2.0,C#,.net,.net 4.0,.net 2.0,我们有一个用.NET2.0框架(VS2005)构建的C#DLL(我们称之为myapp.exe),我们发现我们的应用程序无法在只安装了.NET4.0或更高版本的机器上运行。为了让我们的应用程序能够在.NET4.0上运行,我根据本文在myapp.exe.config中添加了以下几行代码 它正在发挥作用 然后我看到这篇文章也提到了以下内容(特别是第二段): 现在,我知道你不能只接受3.5 Service Pack 1应用程序 然后运行它 在V4.0 CLR上。它需要V2.0 CLR或使用 标记,以

我们有一个用.NET2.0框架(VS2005)构建的C#DLL(我们称之为
myapp.exe
),我们发现我们的应用程序无法在只安装了.NET4.0或更高版本的机器上运行。为了让我们的应用程序能够在.NET4.0上运行,我根据本文在
myapp.exe.config
中添加了以下几行代码


它正在发挥作用

然后我看到这篇文章也提到了以下内容(特别是第二段):

现在,我知道你不能只接受3.5 Service Pack 1应用程序 然后运行它 在V4.0 CLR上。它需要V2.0 CLR或使用 标记,以使应用程序在V4.0 CLR上运行,并且该弯曲可能会 做一些你不想做的事

但我没有意识到的是,安装.NET4.0不会安装 2.0/3.0/3.5/3.5Sp1应用程序所需的位。它只会安装 V4.0 CLR和V4.0程序集,不另外安装等效程序 NET Framework V3.5 Sp1的版本。因此,您需要安装(例如).NETFramework V3.5SP1 你自己和.NET4.0

从我的测试来看,这意味着我可以在.NET4.0上用.NET4.0框架(4.0程序集/库)运行我的2.0C#应用程序,这与文章所说的相矛盾

还是我在这里遗漏了什么?如果有人能澄清这一点,可能会有所帮助。微软一点也不清楚这一点

从我的测试来看,这意味着我可以在.NET4.0上用.NET4.0框架(4.0程序集/库)运行我的2.0C#应用程序,这与文章所说的相矛盾

您可以使用.NET 4程序集在.NET 4上运行应用程序。然而,运行时行为总是有可能发生轻微变化,因为您不会使用与开发时相同的运行时和框架。我怀疑这篇文章是在暗示,仅仅安装4.0不会获得完全相同的行为,不过,正如您所看到的,它应该可以工作


这样做可能很好,但如果这将成为标准部署选项,我建议您对应用程序进行彻底测试。

仅将web.config设置为supportedRuntime version=“v4.0.30319”/是不够的

您需要在Visual Studio中实际打开项目,将其目标框架(属性-->构建)更改为4.0,然后将构建的解决方案重新部署到4.0客户端。在2.0和4.0(system.web等)之间,有几个系统程序集是不同的,尽管如前面的答案所示,提供了向后兼容性

一致地为客户提供actuual“4.0兼容”版本的唯一方法是根据4.0运行时编译它。这将需要将任何第三方开源库升级到其4.0版本。

我引述:

.NET Framework 4与使用.NET Framework版本1.1、2.0、3.0和3.5构建的应用程序向后兼容。换句话说,使用以前版本的.NET Framework构建的应用程序和组件将在.NET Framework 4上工作

取自

您对App.config文件的想法是正确的,但您的想法仅限于一行。
我可以建议更自由地使用supportedRuntime行吗

例如:


为什么
supportedRuntime version=“v3.5”
被注释掉了?
请记住,此配置标识应用程序与哪些版本的公共语言运行库(CLR)兼容。CLR没有3.0或3.5版本。请参阅

,以便更简洁一点。在App.config中,您显示了对CLR的支持。从.Net v2和其他版本中,只有。因此,以下内容将为您提供对.Net v2及更高版本的支持。确保包含与项目一起生成的exe.config文件,否则您可能仍会看到要求安装.Net的弹出窗口

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v2.0.50727"/>
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

要支持.Net v2到v3.5,请使用:

<supportedRuntime version="v2.0.50727"/>

要支持.Net v4.0至4.6,请使用:

<supportedRuntime version="v4.0"/>

有关

的详细信息,请访问:


您可以选择任何App.config文件设置。

安装完整版本,而不是客户端配置文件。不确定完整版本和客户端配置文件在这里是否会有任何区别?我相信大家都知道这一点,但上面的代码片段需要包装在
-标记中才能正常工作。如果没有旧版本(3.5 sp1/3.5),net 4.0无法单独安装@K3rnel31可以-你只需要配置你的应用程序,强制它使用CLR 4…我的意思是在机器上。net 4.0没有以上版本就不能单独安装,因为.net 4.0/4.5只是3.5sp1/sp2的更新。@K3rnel31这不是真的。您可以在没有3.5sp1的情况下安装.NET 4,例如,Windows 8默认情况下会这样做。NET 4使用一个单独的framework/CLR,不是一个更新-它是一个新的framework isntall。@K3rnel31 Windows 8没有.NET 3.5。您不必在XP或Vista上安装.NET 3.5(虽然.NET 2是预装的,但它不是预装的),但您可以从XP/Vista/Windows 7中删除3.5,然后仍然安装.NET 4。我在野外遇到过这种情况。1这不是一个web应用程序2目的是将程序集保存在.net 2.0中,并使其在所有其他版本上工作..是的。理解。上述所有规定仍然适用。您仍然需要根据4.0运行时重新编译您的应用程序(winforms应用程序或其他任何应用程序)。更改app.config并不能确保任何事情。假设它会以其他方式工作是一个很大的风险-可能-但很大程度上取决于第三方程序集(nHibernate、log4net等)的使用情况,除非您将所有这些程序集升级到正确的(4.0)版本并根据