从.NET 4.0应用程序链接.NET 2.0托管程序集时,使用哪个框架?

时间:2010-07-16 17:43:09

标签: .net-2.0 .net-4.0 clr

如果我需要从4.0 CLR应用程序链接到2.0 CLR程序集(纯托管代码,没有混合模式问题),2.0代码是否在2.0 CLR或4.0上运行。

基本上,是否存在影响2.0代码的4.0破坏性更改的风险?

3 个答案:

答案 0 :(得分:18)

上面的答案是不正确的。你确实与完整的框架并排。 .Net 2 APPLICATION(注意,这意味着EXE,而不是库)不会自动升级到.Net 4。

但是如果.Net 4应用程序加载.Net 2程序集,它将加载到同一运行时(否则它们如何共享信息)。使用兼容模式将.Net 2程序集加载到.net 4运行时,该模式应该最大程度地减少更改中的破坏(主要用于.Net 4中的安全性更改)。

<。> .Net 2程序集不能引用.Net 4程序集,因为它没有功能。

我知道的唯一例外是你从C ++应用程序加载.Net程序集。 C ++应用程序可以加载和托管两个运行时。它可能会加载.Net 2程序集和.Net 4程序集,但它们无法直接相互通信。这就是CLR Procs在SQL Server中的工作方式。您可以使用.Net 2 CLR Proc和.Net 4 CLR Proc,它们不通信,但都加载到服务器上。

MSDN杂志上有一篇关于最近托管.Net框架的文章,但我现在找不到它。也许其他人可以发布链接。

因此,您应该能够将任何.Net 2程序集加载到.Net 4可执行文件中,而不会出现太多问题。我见过的唯一问题是安全权限。

答案 1 :(得分:6)

  

基本上,是否存在影响2.0代码的4.0破坏性更改的风险?

不。从.NET 4开始,您根本不必担心的兼容性问题!版本4引入了一个名为"In-Process Side-by-Side Execution"的新功能,它基本上允许您加载CLR的多个版本进入同一个过程。

换句话说,由于您的主应用程序在4.0运行时运行,因此您可以告诉它在加载2.0 CLR程序集时加载2.0运行时。 2.0 CLR程序集将使用2.0运行时,而您的应用程序将继续使用4.0运行时。

你如何指定这个?我相信你可以为你的2.0 CLR程序集添加一个配置文件(例如“My.dll.config”与“My.dll”在同一目录中),但我自己没有尝试过DLL。不过,这是你在程序集的配置文件中添加的内容:

<?xml version="1.0"?>
<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727" />
  </startup>
</configuration>

答案 2 :(得分:1)

相关问题