2010-09-30 57 views
0

標題是我想要完成的事情的自我解釋。我有一個建立在3.5中的COM可見組件,而我的新項目是4.0。下面的代碼非常類似於我想從3.5組件運行的代碼。如何從3.5項目中延遲綁定CLR 4.0程序集?

 Assembly a = Assembly.LoadFrom(@"C:\MyCLR4.exe"); 
     Type t = a.GetType("MyCLR4Class"); 
     object o = Activator.CreateInstance(t); 

最終我得到的錯誤「這個組件由運行時比當前加載的運行新建成並不能裝載」
我敢用我所別處找到氣餒。我需要的是解決方法來完成這一點。 謝謝!

+0

我不認爲你可以在CLR2中加載CLR4程序集(這正是你要做的......)。這個錯誤信息很清楚。 – Mark 2010-09-30 16:11:07

+0

我可以理解,如果我有一個直接參考,因爲執行彙編只知道它自己的CLR。在運行時和後期與反射綁定我不明白。兩個CLR都安裝在機器上,每個DLL都知道在哪裏啓動自己,以及相應的CLR是相互獨立的。我知道錯誤很明顯,但不知何故,我仍然希望有一種解決方法。 – 2010-09-30 16:15:39

+1

據我所知,這需要使用託管接口http://msdn.microsoft.com/en-us/library/dd380851.aspx。有一個codeplex項目可以幫助從託管代碼http://clractivation.codeplex.com/使用它們,或者複製系統的某些部分來爲你做這件事(例如,使用COM來獲取4.0程序集 - http:// blogs。 msdn.com/b/clrteam/archive/2009/06/07/in-process-side-by-side-part-2-common-in-proc-sxs-scenarios.aspx [but old info]) – 2010-10-14 00:52:13

回答

0

我放棄了。如果不進行一些嚴肅的妥協以及Tony Lee指出的GAC和COM註冊的各種黑客行爲(感謝鏈接),就無法做到這一點。我最終重建了4.0中的所有內容。

複述愛因斯坦: 「.NET都很好,但微軟一直通過鼻子周圍拖我們」

:)

謝謝大家的意見和幫助。

相關問題