我目前正在编写几种以各种COM兼容语言编写的旧应用程序,但其中有一个只支持.NET2插件的插件体系结构。我们尝试升级到.NET4并失败,所以现在我们在应用程序中将.NET2作为CLR运行时。有没有办法将.NET 4库编组为.NET 2应用程序?
我们现在需要访问一些相当复杂的Web服务,我们希望使用WCF。第一个选项是使用COM包装器,并从本地代码调用.NET4库,但是我们失去了使用我们的插件机制。我想知道是否有一种方法可以在同一个进程中运行,或者我可以通过其他方式来解决这个问题?
我目前正在编写几种以各种COM兼容语言编写的旧应用程序,但其中有一个只支持.NET2插件的插件体系结构。我们尝试升级到.NET4并失败,所以现在我们在应用程序中将.NET2作为CLR运行时。有没有办法将.NET 4库编组为.NET 2应用程序?
我们现在需要访问一些相当复杂的Web服务,我们希望使用WCF。第一个选项是使用COM包装器,并从本地代码调用.NET4库,但是我们失去了使用我们的插件机制。我想知道是否有一种方法可以在同一个进程中运行,或者我可以通过其他方式来解决这个问题?
@ 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>
是的,这是一个更好的解决方案。这可能是通过一些测试,不像我的黑客:) – 2011-01-05 02:40:34
如此接近!它几乎奏效。至少我得到了不同的错误,看起来我越来越近了。谢谢。 – Doobi 2011-01-05 05:40:31
这是一个可怕的想法(这是一个坏主意,如果我提出它,我会解雇我)。
您可能可以通过加载器应用程序强制应用程序在.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});
}
}
}
不明确的问题是什么。有.NET 2.0,.NET 4.0和COM。什么需要连接到什么? – Cheeso 2011-01-05 01:31:46
需要执行的代码= .NET4。我想从'COM'应用程序执行它。该应用程序已经有了一个.NET2框架,所以我希望能够在.NET 2中使用.NET 4库。 – Doobi 2011-01-05 02:33:12