.NET框架requiredRuntime标志

时间:2010-11-26 03:00:25

标签: .net

我可以使用此标志通过将此标志放在二进制文件的应用程序配置文件中来加载特定版本的.NET框架。但二进制的配置文件不在我的控制之下,因为我负责DLL。有没有办法在DLL中指定相同的标志,这样DLL可以加载用框架4.0构建的其他DLL?

例如,使用目标框架3.5构建的Binary A.exe将DLL B.dll加载到目标框架3.5。现在B.dll加载了用目标框架4.0构建的DLL C.dll。

我可以通过将以下配置放在A.exe的app.config中来实现。

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

我无法控制A.exe和app.config,但我可以控制B.DLL和C.DLL。 你觉得有可能吗?

-Thanks,

-Brajesh

1 个答案:

答案 0 :(得分:1)

由于加载过程,这是不可能的。在创建加载DLL的请求时,.NET Framework已经加载到进程中。在.NET 4之前,您一次只能处理一个版本的CLR。 (N.B..NET 2.0,3.0和3.5都在CLR 2.0上运行。)即使使用.NET 4,它允许CLR 2.0和CLR 4.0在同一个进程中共存,它们也必须在单独的AppDomain中运行。您无法在不同的AppDomain之间进行无缝通信。

一个可能的想法......使用一个小的CLR 2.0填充程序创建一个单独的CLR 4.0 AppDomain,将.NET 4.0程序集加载到其中,然后与之通信。这不是简单,容易或高效的。另一种选择是在单独的进程中托管程序集,并使用命名管道,TCP或其他通信通道在.NET 4.0代码和现有EXE中托管的.NET 3.5 Shim之间进行通信。

如果主机应用程序是.NET 3.5,我会说你的程序集坚持使用.NET 3.5。这会让人头痛不已。