有没有办法将.NET 4库编组到.NET 2应用程序中?

时间:2011-01-05 01:18:14

标签: c# clr runtime

我目前正在开发一些用各种COM兼容语言编写的旧应用程序,但它们的插件架构只支持.NET2插件。我们已经尝试升级到.NET4并且失败了,所以现在我们仍然坚持使用.NET2作为我们应用程序中的CLR运行时。

我们现在需要访问一些相当复杂的Web服务,我们希望使用WCF。第一个选项是使用COM包装器并从本机代码调用.NET4库,但我们失去了对插件机制的使用。我想知道是否有办法运行.net 2& 4个组件在同一个过程中,或者其他一些方法我可以解决这个问题?

2 个答案:

答案 0 :(得分:2)

@ Kennet的方法略有改变,只需更改配置文件,以便应用程序在.Net 4中运行而无需重新编译。

以下是我在此主题上发现的一篇文章:Running .NET 2 Runtime applications under the .NET 4 Runtime

这是文章中的重要部分(我自己没试过)......

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

答案 1 :(得分:1)

这是一个可怕的想法(如果我提出的话,我会解雇我这是个坏主意。)

您可以使用加载程序应用程序强制应用程序在.Net 4 CLR中运行。

加载器应用程序应该是.Net 4可执行文件,除了加载应用程序的可执行程序集之外什么都不做,找到程序入口点并执行它。因为.Net 2程序集是有效的4个程序集,它应该运行没有问题,但应该支持.Net 4插件。

<强>更新

我运行了一个快速测试版,它至少有可能发挥作用。这是加载程序的源代码。我的.Net 2.0应用程序被命名为“App20.exe”,用你自己的名字代替。

using System;
using System.Reflection;
using System.IO;

namespace Loader
{
    class Program
    {
        static void Main(string[] args)
        {
            string oldAppName = Path.GetFullPath("App20.exe");
            Assembly asm = Assembly.LoadFile(oldAppName);
            Console.WriteLine(asm.EntryPoint.Name);
            asm.EntryPoint.Invoke(null, new object[]{args});
        }
    }
}