2010-02-02 49 views
5

我們有一個ASP.NET 1.1 Web應用程序。它調用一個C++ COM對象,該對象又調用一個.NET COM對象。最初,這個.NET COM對象是一個.NET 1.1程序集。現在,我們需要修改這個.NET COM對象,並且在這個過程中我們現在使用Visual Studio 2008,因此它現在是一個.NET 2.0 COM對象。我們現在發現我們的ASP.NET 1.1 Web應用程序仍然可以調用C++ COM對象,但是C++ COM對象無法在新的.NET 2.0 COM對象上調用CoCreateInstance()。當我們將Web應用程序配置爲使用.NET 2.0 Framework時,C++ COM對象可以調用.NET 2.0 COM對象,但這會破壞Web應用程序。您可以從ASP.NET 1.1 Web應用程序調用.NET 2.0 COM對象嗎?

目前,我正計劃使用Visual Studio .NET 2003重新構建.NET COM對象,以便使其成爲.NET 1.1組件。但如果可能的話,我寧願不這樣做。我知道我們也應該將我們的網絡應用程序升級到.NET 2.0,但這需要更長的時間。

那麼,我們的ASP.NET 1.1 Web應用程序能夠通過C++ COM對象調用.NET 2.0 COM對象嗎?

謝謝你的任何建議。

-Dave Herrmann

+1

沒有機會將.NET 1.1應用程序升級到.NET 2.0? .NET 2.0中很少會打破.NET 1.1應用程序。 –

回答

1

如果您在運行它,則不是。 .Net v1.1和v2.0運行時不能共存於一個進程中。哪個是先裝載的,勝出。

但是,您應該可以在單獨的進程中的COM +激活上下文中運行它。這可能是您的情況的權宜之計。

+0

是的,這是我發現的。我的.NET 2.0 COM程序集是一個進程內COM對象,因爲它作爲IIS的一部分運行。所以,我認爲我唯一的解決方案是重新安裝舊的Visual Studio .NET 2003開發環境,並使用.NET 1.1重建我的程序集。 感謝您的回覆。 -Dave Herrmann –

+0

您可以在單獨的進程中運行進程內COM對象,並讓COM +基礎結構編組您的調用。這是一個簡單的配置問題。您可能會先嚐試... – codekaizen

0

快速建議 - 它可能不會讓事情變得更容易......但是有一種可能的解決方法,爲什麼不爲.NET 1.1和.NET 2.0應用程序之間的IPC通信創建內存映射,例如,C++ COM創建一個用於讀/寫的內存映射,.NET 1.1對象打開內存映射,寫入一些數據,C++ COM對象讀取它並將調用委託給.NET 2 COM對象...並返回數據通過記憶地圖...抱歉,如果我不能給你一個比這更好的建議......你是否受時間限制?

1.1 .NET - > C++ COM - > .NET 2.0 COM

希望這有助於 最好的問候, 湯姆。

+0

我認爲只是配置一個COM +上下文會容易得多...無需代碼+重新編譯。 – codekaizen

+0

@codekaizen:哦好吧...我的建議有點極端.... :) – t0mm13b

0

如果我正確地理解了你,你想在1.1而不是2.0上構建你的程序集。你爲什麼不嘗試使用命令行編譯器?您不需要安裝VS 2003來編譯和構建程序集。

如果您不知道如何啓動,請在沙盒機器上安裝VS,構建項目並檢查輸出窗口 - 您將看到用於編譯和構建的命令(csc.exe或vbc.exe)最重要的)在大多數情況下,這不是火箭科學。

另一種選擇:移到2.0一般 - 不會真的受傷。

P.S .: .NET COM對象拼寫錯誤。稱它爲一個程序集。

相關問題