我目前正在开发一些用各种COM兼容语言编写的旧应用程序,但它们的插件架构只支持.NET2插件。我们已经尝试升级到.NET4并且失败了,所以现在我们仍然坚持使用.NET2作为我们应用程序中的CLR运行时。
我们现在需要访问一些相当复杂的Web服务,我们希望使用WCF。第一个选项是使用COM包装器并从本机代码调用.NET4库,但我们失去了对插件机制的使用。我想知道是否有办法运行.net 2& 4个组件在同一个过程中,或者其他一些方法我可以解决这个问题?
答案 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});
}
}
}