2011-05-18 161 views
1

在.net 4中开发的windows应用程序是否会引用在.net 3.5中开发的程序集,需要同时安装.net 4和.net 3.5以供应用程序运行?.net 4向后兼容性

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

[编辑] 我开悟:)所以,这里的my real question这是一直没有答复一段时间在这里在SO。如果你们能弄清楚这个问题,会很高兴!

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

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

回答

6

林不知道你需要安装3.5。该.NET CLR 4.0能够加载.NET编写2.0及组件,它似乎不太可能,他们会运行有多种不同的版本CLR,因为.net4和2.0程序集可以互相调用而不需要任何互操作。

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

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

(.NET 2.0和4.0 referes到公共语言运行库版本,2.0,3.0和3.5都使用2.0版本的CLR)

CNC中

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

-edit2-

这里是你如何修改的app.config让一个.NET 4.0的可执行负载在所有方案2.0组件(如网络驱动器的运行)

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

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

在我的情况下,从上面的答案L3891的答案中添加下面几行代码到我的app.config中去除了对.NET 3.5的依赖。

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

是什么让你认为.NET的向后兼容性不允许将程序集加载到.NET 4中没有安装3.5的CLR? – 2011-05-18 16:04:38

+0

奇怪的是,我们在这里工作的其中一个项目需要安装两个框架版本,现在最终的安装环境是Windows XP,而且我正在使用WF等,但是这会影响.NET 3.5的需求吗?有没有我可以改变的选项,使它现在不需要.NET 3.5? – 2011-05-18 16:05:36

+1

如果您在app.config中设置了supportedRuntime版本=“v4.0”,它会工作吗? (见我的文章),应该为3.5可执行文件以及 – aL3891 2011-05-18 16:16:01

2

不,您不需要安装.NET 3.5。假设你没做什么特别的事情,所有的程序集都会被加载到同一个CLR中,所以.NET 3.5程序集最终将使用它所使用的所有类的.NET 4实现。

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

+0

其他任何可能“打破”.net 4向后兼容性? – Trainee4Life 2011-05-18 18:48:20

+0

@ Trainee4Life:一定会有一些微妙的角落案例,但我可以立即想到的没有什么意义。 – 2011-05-18 18:52:24