2011-01-05 53 views
0

我目前正在编写几种以各种COM兼容语言编写的旧应用程序,但其中有一个只支持.NET2插件的插件体系结构。我们尝试升级到.NET4并失败,所以现在我们在应用程序中将.NET2作为CLR运行时。有没有办法将.NET 4库编组为.NET 2应用程序?

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

+0

不明确的问题是什么。有.NET 2.0,.NET 4.0和COM。什么需要连接到什么? – Cheeso 2011-01-05 01:31:46

+0

需要执行的代码= .NET4。我想从'COM'应用程序执行它。该应用程序已经有了一个.NET2框架,所以我希望能够在.NET 2中使用.NET 4库。 – Doobi 2011-01-05 02:33:12

回答

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> 
+0

是的,这是一个更好的解决方案。这可能是通过一些测试,不像我的黑客:) – 2011-01-05 02:40:34

+0

如此接近!它几乎奏效。至少我得到了不同的错误,看起来我越来越近了。谢谢。 – Doobi 2011-01-05 05:40:31

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}); 
     } 
    } 
} 
相关问题