Dar*_*usz 10 .net performance assemblies .net-4.0 .net-2.0
让我们假设我们有两个程序集:
它是否对Foo.Application性能有影响(或有任何其他缺点)?
Cod*_*ray 19
在您在问题中描述的情况下,一切都将Just Work™没有任何问题.
.NET 4.0应用程序将.NET 2.0库直接加载到.NET 4.0运行时环境中.除非您明确要求,否则它不会使用并行执行.网络上有很多关于这方面的错误信息或不清楚的陈述,因此在评估您所阅读的内容时要小心.
我终于看到了这篇文章,证实了Jon Skeet在他的回答中所说的话.特别是,该文章解释了(强调添加):
In-Proc SxS无法解决库开发人员面临的兼容性问题.由应用程序直接加载的任何库 - 通过直接引用或Assembly.Load-- 将继续直接加载到加载它的应用程序的运行时和AppDomain中.这意味着如果重新编译应用程序以针对.NET Framework 4运行时运行,并且仍然具有针对.NET 2.0构建的依赖程序集,那么这些依赖项也将加载到.NET 4运行时.因此,我们仍然建议您针对您希望支持的框架的所有版本测试您的库.这是我们继续保持高水平向后兼容性的原因之一.
但是,如果您对更多细节感兴趣,值得一提的是,CLR 4.0版本引入的新功能之一是能够在单个版本中同时运行多个版本的运行时处理.这被称为"处理中并行执行"(如果你非常酷,则称为" Inproc SxS"),并且是一个非常强大的工具.你可以阅读更多关于它在这里的CLR团队的博客.
这里有一些漂亮的图片用于演示目的:

请注意用于在.NET 2.0之上构建.NET 3.0和3.5版本的"layer-cake"模型.这意味着他们都会毫无问题地并排行动.但是其他版本的隔离会产生问题.
但是,如上所述,.NET 4.0通过并行执行解决了这个问题:

当然,这主要适用于涉及COM和与Outlook等外部应用程序互操作的情况,但它仍然是一个非常酷的功能.
但无论哪种方式,使用此方法都不应该看到任何问题,无论是兼容性,性能还是其他任何问题.
除非您明确使用SxS,否则您的.NET 2程序集将加载到.NET 4 CLR中.根本不应该有任何性能问题...最初针对.NET 2的代码将使用.NET 4库和CLR等运行.是的,您可以使用在.NET 1.1中编译的程序集. .NET 2或更高版本的应用程序.
这里是一个问题,如果你尝试在.NET 4中,IIRC加载一个混合模式的组件(一些本地代码,一些IL)...但如果它是"只是"一个.NET类库,你应该罚款.