如果我需要从4.0 CLR应用程序链接到2.0 CLR程序集(纯托管代码,没有混合模式问题),2.0代码是否在2.0 CLR或4.0上运行。
基本上,是否存在影响2.0代码的4.0破坏性更改的风险?
答案 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)