2011-01-05 84 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}); 
     } 
    } 
} 
相關問題