C# 在仅使用4.0框架的计算机上运行参考2.0库的.NET 4.0应用程序

C# 在仅使用4.0框架的计算机上运行参考2.0库的.NET 4.0应用程序,c#,.net,clr,version,C#,.net,Clr,Version,这将是一个真正的痛苦尝试复制,所以我希望有人有一个快速的答案 假设我有一个.NET4.0应用程序,其中引用了一个.NET2.0库(本例中为SharpZipLib)。当然,这在安装了.NET2.0和4.0的普通机器上运行良好 如果运行此应用程序的服务器只有.NET 4.0而没有2.0(或3.0/3.5等),我需要做什么才能使.NET 2.0库正常运行 从我所读到的内容来看,我似乎可以为supportedRuntime设置一个配置,但我不太清楚它到底起什么作用 配置设置会起作用吗?还是只有.NET

这将是一个真正的痛苦尝试复制,所以我希望有人有一个快速的答案

假设我有一个.NET4.0应用程序,其中引用了一个.NET2.0库(本例中为SharpZipLib)。当然,这在安装了.NET2.0和4.0的普通机器上运行良好

如果运行此应用程序的服务器只有.NET 4.0而没有2.0(或3.0/3.5等),我需要做什么才能使.NET 2.0库正常运行

从我所读到的内容来看,我似乎可以为
supportedRuntime
设置一个配置,但我不太清楚它到底起什么作用

配置设置会起作用吗?还是只有.NET 4.0库在这种环境下才能工作

(这是一个假设环境——我不打算让自己的服务器使用4.0而不是2.0,但如果有人疯狂地这么做,我希望能够支持他们)


谢谢

CLR可以在.net 4.0框架中加载较旧的程序集

这里有一本好书:

编辑:更新了文章的引用。特别注意粗体

NET Framework 4运行时和所有未来的运行时将能够 彼此在进程中运行。虽然我们没有支持这个 对于较旧的运行时(1.0到3.5),我们确实确保 4及以上版本将能够在进程中与任何一个旧版本一起运行 运行时换句话说,您将能够在中加载4、5和2.0 相同的过程,但您将无法在中加载1.1和2.0 相同的过程。.NET Framework 2.0到3.5都在2.0上运行 运行时和so之间没有冲突,如图1所示 二,


如果您有SharpZipLib的源代码,您可以将其重新构建为.NET 4.0(并且,可以通过以下方式进行转换):

现在,我知道你不能只接受3.5 Service Pack 1应用程序 并在V4.0 CLR上运行它。它需要一个V2.0 CLR或使用 一个
标记,用于弯曲应用程序以在其上运行 V4.0 CLR和弯曲可能是您不想要的 去做


从bryanmac答案()中的链接:

这意味着,如果重新编译应用程序以针对.NET Framework 4运行时运行,并且仍然具有针对.NET 2.0构建的依赖程序集,则这些依赖程序也将加载到.NET 4运行时


但是,这可能意味着,由于在不同的运行时运行,可能会出现错误。

谢谢-在这种情况下,这样做可能没什么大不了的,但我不希望这成为我将来可能使用的其他库的默认答案。谢谢,这是一篇好文章。它没有提到
设置,但它提供了很多细节。请注意,要完成In-Proc SxS,必须安装两个运行时。@JoeEnos:我认为
supportedRuntimes
位只适用于主应用程序。请参见Daniel的回答——用于依赖项的运行时由主应用程序确定。@Daniel-对-在.net 4.0中,您不需要这样做,它将直接加载2.0而不安装2.0。这就是它的酷之处。4.0运行时包括2.0运行时的说法在哪里?不同的是,在4.0(及更高版本)中,您可以在同一进程中激活多个运行时。这是为了将应用程序迁移到新的运行时,而不是库。对于像SharpZipLib这样的常规2.0程序集,不需要任何特殊功能。它加载时没有问题,或者在以4.0为目标的EXE中进行配置是正确的-拥有4.0应用程序可以加载以2.0为目标的库。请参阅下面我的答案-您不需要安装2.0、3.0或3.5 fx