我目前正在編寫幾種以各種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