.net 4向后兼容

时间:2011-05-18 15:51:33

标签: .net-3.5 .net-4.0 backwards-compatibility

在.net 4中开发的Windows应用程序是否会引用.net 3.5中开发的程序集,是否需要安装.net 4和.net 3.5才能运行应用程序?

我怀疑是这样,这是我的观察之一。 此外,它感觉合乎逻辑,因为它们都需要不同的运行时间来执行。

[编辑] 我开悟了:)所以,这里的my real question在SO处一直没有回答。如果你们能解决问题,我们会很高兴的!

应用程序的app.config已经有以下几行。

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>

3 个答案:

答案 0 :(得分:7)

我不确定你是否需要安装3.5 .. .net 4.0 CLR能够加载用.net 2.0及更高版本编写的程序集,因为.net4它们似乎不太可能运行不同版本的CLR和2.0程序集可以互相调用而无需任何互操作。

我所知道的是,如果您的可执行文件是.net 4.0程序集,则可能必须修改app.config,以便在某些情况下加载.net 2.0程序集。这是因为安全模型从.net 2.0中的CAS更改为4.0中的simplified system

这对我来说似乎进一步表明.net 2.0 clr在将.net 2.0程序集加载到.net 4.0进程时实际上并未使用。

(.net 2.0和4.0引用公共语言运行时版本,2.0,3.0和3.5都使用2.0版本的CLR)

-edit -

根据this thread,如果进程为4.0,则不需要.net 3.5来加载3.5程序集。

-edit2 -

以下是如何修改app.config以使.net 4.0可执行文件在所有方案中加载2.0程序集(例如运行网络驱动器)

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

答案 1 :(得分:2)

不,您不需要安装.NET 3.5。假设您没有做任何特别的时髦,所有程序集都将加载到同一个CLR中,因此.NET 3.5程序集最终将使用它所使用的所有类的.NET 4实现。

正如aL3891所提到的,安全系统随着时间的推移已经发生了一些变化,但如果它是一个不使用CAS的“简单”类库,那么没有任何特殊工作就应该没问题。当然,最好在最终到达客户的机器之前测试所有这些:)

答案 2 :(得分:0)

更正:我有一个程序集,需要安装.NET 4.0和.NET 3.5;但根据研究,这不典型,通常情况并非如此。

在我的情况下,从aL3891上面的回答中将以下代码行添加到我的app.config中,为我删除了对.NET 3.5的依赖。

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>